Closed4
DoctrineでOne-To-ManyのChildでソートする
タイトルが適切かは微妙
$query = $this->createQueryBuilder('c')
->where('c.id = :id')
->setParameter('id', $id)
->innerJoin('c.items', 's', 'WITH', 'c.id = :id')
->orderBy("s.createdAt", "ASC")
->getQuery();
上記のようにしたとき,明らかにs.createdAt
でソートされていないように見える
$query->getResult()[0]->getItems()
の中身を見てみると,PersistentCollection
という型が返ってきていることがわかる.
foreach($result->getItems() as $item){
// 任意の処理...
}
上記のようにイテレータがよしなにやってくれるが,どこで順序を指定できるのか(orderBy
みたいに)...
愚痴
結論
Selectで必要なものはちゃんと指定しましょう,という話だった.
$query = $this->createQueryBuilder('c')
+ ->select(['c', 's'])
->where('c.id = :id')
->setParameter('id', $id)
->innerJoin('c.items', 's', 'WITH', 'c.id = :id')
->orderBy("s.createdAt", "ASC")
->getQuery();
このスクラップは2023/02/07にクローズされました