2011-09-01 21 views
8

Aşağıdaki sorgu var:Doctrine2'de ilişkili bir varlık sonucunu nasıl sınırlandırabilirim?

$query = $this->getEntityManager()->createQuery(' 
         SELECT m FROM MyCoreBundle:Motivation m 
         WHERE m.user = :user 
         ORDER BY m.date DESC'); 

$query->setParameter('user',$user); 
$query->setFirstResult(0); 
$query->setMaxResults(1); 
//@TODO if there is not result recorded for the user, return sth which indicates this 
return $query->getResult(); 
:

$query = $this->getEntityManager()->createQuery(' 
         SELECT u, p, m 
         FROM MyCoreBundle:User u 
         JOIN u.programmes p 
         JOIN u.motivation m 
         '); 

$result = $query->getResult(); 

Ben motivasyon kısıtlamak istediğiniz I (Motivasyon depo Açık) başka bir yerde kullanıyorum bu ikinci sorgunun sonucu olduğu her kullanıcı için döndürülen nesnelerin

İlk sorguda veya daha iyi bir yaklaşımda motivasyonu kısıtlamak ve kısıtlamak için bir yol var mı?

+1

görmek ve öyle olacak çok erişilen, olası bir çözüm 'Kullanıcı: LatestMotivation' OneToOne relatinship oluşturmaktır. Ve sonra yeni bir "Motivasyon" varlığı eklendiğinde (Doktrini 'prePersist' etkinlikleri aracılığıyla) yeni eklenen ile' LatestMotivation'ı günceller. Bu şekilde, en son motivasyonu getiren birçok 'Kullanıcı' kaydı üzerinde yineleyebileceksiniz. HTH –

cevap

14

Ortak satır sayısını sınırlayamazsınız. Eğer koleksiyonu ->slice() kullanabilirsiniz Doctrine 2.1 varsa

:

$collection = $user->getMotivations(); // returns a LazyCollection, 
              // makes no SQL query 

$motivations = $collection->slice(0, 20); // queries the first 20 motivations 
              // for this user (if the association 
              // was not fetch-joint) 

aşağıda yazılı düşünüldüğünde ve "son motiviation" sizin için birincil öneme sahip olduğunu varsayarak http://www.doctrine-project.org/docs/orm/2.0/en/tutorials/extra-lazy-associations.html

+0

Teşekkürler - Kullanıcı Varlığım için, yalnızca bir motivasyon girişi ekleyen, nesne üzerinde döngü yapan ve $ motivasyon özelliğini üzerine yazan başka bir yöntem ekledim. Kirli ama işe yarıyor. – codecowboy

+2

@ amaud576875 Unfoteyse, dilim yöntemi yalnızca geçerli kullanıcı için ilişkilendirmeleri başlatır. Birden çok kullanıcı arasında geçiş yaparsanız, birden fazla sorgu üretilir. Tüm kullanıcılar için dilimlenmiş koleksiyonun nasıl alınacağının bir yolu var mı? –

+1

@PetrPeller Benzer bir sorunum var. Çözmeyi başardın mı? – svlada

İlgili konular