2012-03-05 14 views
6

Etki alanı nesnesi Bar ile 1: n ilişkisi olan bir etki alanı nesnesine sahibim.Ekstra: Çalışma zamanında tembel veya istekli yüklemeyi seçin

Tüm foo'ların bazı ölçütlerle eşleşmesi gereken iki önemli kullanım durumu vardır. A durumunda, her bir foo'ya bağlı barları umursuyorum, B durumunda, yapmam. Çok fazla çubuk var, bu yüzden basitçe her zaman çubukları yüklemek her zaman A'nın performansı için iyi değil. Aynı şekilde, barların hevesle yüklenmemesi, B durumunda bir n + 1 çığın oluşmasına neden olacaktır. etiketlememek de doğru seçimdir.

Şimdi, sorum şu: Tembel veya istekli olup olmamasına rağmen sorgulama süresinde extbase kalıcılık katmanına söylemek mümkün mü? Evet ise nasıl? Hayır ise, N + 1 sorununu önlemek için Extbase'de başka bir yol var mı (yani gerekli tüm çubukları yükleyin ve sonra önbelleğe almayı önbelleğe aldığınızda umuyoruz)?

Son çare, elbette, tembel yükleme ile foo'ları yüklemek, çubukları elle ikinci bir sorguya yüklemek ve daha sonra el ile ilişkiyi kurmak olacaktır.

Herhangi bir öneriniz var mı?

+0

B vakalarını tek tek üzerinde çalışmak üzere yeniden tasarlayarak çözdüm. İyi değil, ama daha iyi, ve şimdilik yeterince hızlı. Bunu nasıl yapacağımı hala istiyorum. – adhominem

+0

Kendi sorunuzu cevaplayabilir ve daha sonra bunu çözülmüş olarak işaretleyebilir misiniz? Yine de, tartışılmamış [typo3] soruları listesinde ortaya çıkıyor. – Mateng

+0

Hm ... Sorunun gerçekten cevaplandığını düşünmüyorum. Bu sorun için bir çözüm buldum, ama genel durum ... – adhominem

cevap

2

Son birkaç ay içinde Extbase ile uğraşıyorum ve internals içine düştüm, ve bu şudur: Bu imkansız.

Sanırım bu soruyu kapatıyor, ama sevdiğim gibi değil.

Aslında daha da kötüsü: İstekli yüklemesi hiç uygulanmıyor, dokümanlara göre @eager etiketi bir ilişki için istekli yükleme göz ardı edilir.

+2

Son bölüm için: İstekli yükleme varsayılan, dolayısıyla '@ eager' Tag yok. Bu davranışı sadece @ lazy' Tag ile tembelleştirebilirsiniz. – shredding

+1

@shredding Çalışma zamanında tembel ya da istekli davranışlar arasında seçim yapmak mümkün değil, korkarım. –

+1

Evet, çalışma zamanında ayarlayamazsınız. – shredding

0

Tembel bırakmayı ve gerektiğinde bir diziye dönüştürmeyi ne dersiniz? (foo-> bar-> toArray())

+1

Bunu yapmanın faydaları nelerdir? – nalply

+1

Bu yine de tembel olurdu (eksik veri almak için kullanım zamanında fazladan DB sorgusu, her bir öğe için bir sorgu) istekli olmak yerine (tüm gerekli veriler db'den tek, ilk sorgu ile yüklenir) – adhominem

İlgili konular