要はRailsのexists?
みたいなことをしたい。
DBに余計な負荷をかけない。
> User.exists?(name: '田中')
SELECT 1 AS one FROM `users` WHERE `users`.`name` = '田中' LIMIT 1
=> true
コード
$entityManager = $this->getDoctrine()->getManager();
$result = $entityManager->getRepository(User::class)
->createQueryBuilder('user')
->select('1')
->andWhere('user.name = :name')
->setParameter('name', $name)
->getQuery()->setMaxResults(1)->getOneOrNullResult();
return !is_null($result);
説明
-
select('1')
:SELECT 1
に対応 -
setMaxResults(1)
:LIMIT 1
に対応 -
getOneOrNullResult()
: 配列ではなく最初の1件またはNULL
を返す -
!is_null($result)
: 上記の「最初の1件またはNULL
」を「true または false」に置換