ORM QueryBuilderに大きな問題があります。私がする必要があるのは: order
の数がproducts
であり、関連するエンティティ(order
に関連付けられている)がたくさんありますが、ここでは関係ないと思います。私もその数だけ結果を注文する必要があります。Doctrine2 QueryBuilderはエンティティと関連するエンティティの数を選択します
私はこれをどのように達成できるかの例を教えてください。可能であれば、 "インライン" DQLを避けたいと思います。
ORM QueryBuilderに大きな問題があります。私がする必要があるのは: order
の数がproducts
であり、関連するエンティティ(order
に関連付けられている)がたくさんありますが、ここでは関係ないと思います。私もその数だけ結果を注文する必要があります。Doctrine2 QueryBuilderはエンティティと関連するエンティティの数を選択します
私はこれをどのように達成できるかの例を教えてください。可能であれば、 "インライン" DQLを避けたいと思います。
Doctrine Query Builderでデータを取得できます。
あなたはOrder
から商品をジョイントし、次に注文IDでグループ化します。あなたのselectステートメントにCOUNT(product.id)
があり、order by
句のエイリアスを使って注文を並べ替えることができます。以下はRepository
の小さなコードスニペットです。
/**
* @return \Doctrine\ORM\Query
*/
public function getHotelAndRoomType()
{
$qb = $this->createQueryBuilder('order')
->select('partial order.{id, orderId} as order, count(product.id) as total_products_in_order')
->leftJoin('AppBundle:Product', 'product', 'WITH', 'product.order = order.id')
->groupBy('order.id')
->orderBy('total_products_in_order', 'DESC')
;
return $qb->getQuery()->execute();
}
注:コードはテストされていません。
期待どおりに動作する、これは私が探していた正しい解決策です。 – user1970395
私は約2つのソリューションを考えます。まず、注文テーブルの製品の数を維持することは、複雑で遅いクエリを避けることです。 2番目はDQLを[DTO](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax)と共に使用することです。 object –
また、すでに製品を取得している場合はPHPでカウントします。 –
@ skowron-lineこれは実行可能ではありません。次のステップでは、製品のステータスによって「カウント」をフィルタリングする必要があり、実際に頻繁に更新されるためです。私はフィールドをカウントするために不必要な更新を避けたいと思います。また、それは正規化に反する。 – user1970395