Doctrineの条件でエンティティのアイテムをどのように数えることができますか?たとえば、私は私が使用できることを認識しています:
$usersCount = $dm->getRepository('User')->count();
しかし、それはすべてのユーザーを数えるだけです。タイプが従業員の人だけを数えたいと思います。私は次のようなことをすることができます:
$users = $dm->getRepository('User')->findBy(array('type' => 'employee'));
$users = count($users);
それは機能しますが、最適ではありません。次のようなものはありますか?
$usersCount = $dm->getRepository('User')->count()->where('type', 'employee');
QueryBuilder を使用してCOUNT
クエリを設定できます。
_$dm
_がエンティティマネージャーであると仮定します
_$qb = $dm->createQueryBuilder();
$qb->select($qb->expr()->count('u'))
->from('User', 'u')
->where('u.type = ?1')
->setParameter(1, 'employee');
$query = $qb->getQuery();
$usersCount = $query->getSingleScalarResult();
_
または [〜#〜] dql [〜#〜] :
_$query = $dm->createQuery("SELECT COUNT(u) FROM User u WHERE u.type = ?1");
$query->setParameter(1, 'employee');
$usersCount = $query->getSingleScalarResult();
_
カウントは、オブジェクトではなくidフィールドにある必要がある場合があり、リコールできません。その場合は、COUNT(u)
または->count('u')
をCOUNT(u.id)
または->count('u.id')
または主キーフィールドが呼び出されるものに変更します。
この質問は3年前のものですが、条件付きのカウントでfindBy()の単純さを保つ方法があります。
リポジトリにこのメソッドを追加できます:
public function countBy(array $criteria)
{
$persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName);
return $persister->count($criteria);
}
したがって、コードは次のようになります。
$criteria = ['type' => 'employee'];
$users = $repository->findBy($criteria, ['name' => 'ASC'], 0, 20);
$nbUsers = $repository->countBy($criteria);