私は彼と一緒にクエリに対して返されたIDの明確な数を数えようとしています:
$query = $repo->createQueryBuilder('prov')
->select('c.id')
->innerJoin('prov.products', 'prod')
->innerJoin('prod.customerItems', 'ci')
->innerJoin('ci.customer', 'c')
->where('prov.id = :brand')
->setParameter('brand', $brand)
->countDistinct('c.id')
->getQuery();
ただし、このエラーが発生します。
Attempted to call method "countDistinct" on class "Doctrine\ORM\QueryBuilder" [...]
私も試しました
$query = $repo->createQueryBuilder('prov')
->select('c.id')
->innerJoin('prov.products', 'prod')
->innerJoin('prod.customerItems', 'ci')
->innerJoin('ci.customer', 'c')
->where('prov.id = :brand')
->setParameter('brand', $brand)
->expr()->countDistinct('c.id')
->getQuery();
これはこのエラーにつながります:
Error: Call to a member function getQuery() on a non-object in
ドキュメントとは異なる方法でこれを行う方法について、他の指針を得ることができません。
誰かが解決策を提案できますか? ここにリンクの説明を入力してください
countDistinct
はExprクラスのメソッドであり、COUNT DISTINCTはSELECTステートメントに含まれている必要があるため、次のようになります。
$qb = $repo->createQueryBuilder('prov');
$query = $qb
->select($qb->expr()->countDistinct('c.id'))
->innerJoin('prov.products', 'prod')
->innerJoin('prod.customerItems', 'ci')
->innerJoin('ci.customer', 'c')
->where('prov.id = :brand')
->setParameter('brand', $brand)
->getQuery();
動作するはずです。または単に:
$query = $repo->createQueryBuilder('prov')
->select('COUNT(DISTINCT c.id)')
->innerJoin('prov.products', 'prod')
->innerJoin('prod.customerItems', 'ci')
->innerJoin('ci.customer', 'c')
->where('prov.id = :brand')
->setParameter('brand', $brand)
->getQuery();
あなたの場合にcountDistinct
を使用する適切な方法は次のとおりです。
$qb = $repo->createQueryBuilder('prov');
$query = $qb->
->select($qb->expr()->countDistinct('c.id'))
->innerJoin('prov.products', 'prod')
->innerJoin('prod.customerItems', 'ci')
->innerJoin('ci.customer', 'c')
->where('prov.id = :brand')
->setParameter('brand', $brand)
->getQuery();