2013-05-11 9 views
10

Garip bir sorunla karşılaşıyorum. MariaDB 5.5 ve doktrin/orm 2.3.3 kullanıyoruz ve Doktrin Paginator'unu DQL ile kullanmaya çalışıyoruz. http://docs.doctrine-project.org/en/latest/tutorials/pagination.html

DQL'in bir ORDER BY yan tümcesi vardır [bir örnek resim için aşağıya bakın]. Ancak, sonuç belirli bir sayfa boyutu için hiç sıralanmamıştır. Ve, sonuç kümesinin tamamını kapsayacak şekilde sayfa boyutunu artırırsak, sıralama doğru olur.

$dql = "SELECT a, b FROM EntityA a JOIN a.propertyB b ORDER BY a.createdOn DESC"; 
    $query = $this->em->createQuery($dql) 
     ->setMaxResults($pageSize) 
     ->setFirstResult($offset); 
    $paginator = new Paginator($query, $fetchJoinCollection=true); 
    .... 

SQL'i terkettim ve manuel olarak çalıştırdım. Sql de doğru sıralama verdi. Yani Doktrinin Paginator sınıfında sıralama sorununa bir şey neden oluyor.

$ fetchJoinCollection = false değerini belirlediğimde ve Paginator yapıcısına aktardığımda, sıralama herhangi bir $ pageSize için doğru oldu!

Doctrine kaynak kodunu oku [Doctrine/ORM/Tools/Pagination/Paginator.php]. $ FetchJoinCollection = true ile, doctrine son sonucu elde etmek için bir WhereInWalker kullanır, bu da DQL'de ORDER By cümlesine uymaz, çünkü IN() deyimi sonucu içindeki ids ile aynı sırada sonuç üretmez. IN() yan tümcesi.

IN() yan tümcesi için bir çözüm çözümü Ordering by the order of values in a SQL IN() clause'da bulunabilir. Ama bunu kullanarak Doktrini bulamıyorum.

Doktrin iç bilgisi olan herkes biraz ışık tutacaktır ?! Teşekkürler!

+0

Sorunuz mu var? $ dql = "SELECT a, b FROM EntityA a JOIN a.propertyB b a.createdOn DESC BY ORDER"; sütun değil tablo seçiyor gibi görünüyor? –

+0

Bu SQL değil DQL'dir. Örnekte 2 varlık seçiyordum. Ama sorun bu değil. –

cevap