РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
94 of 258 menu

Метод exists класса Expr

Метод exists класса Expr создаёт SQL-выражение EXISTS, которое проверяет, возвращает ли подзапрос хотя бы одну строку. Метод принимает один параметр - подзапрос QueryBuilder или строку с DQL-запросом.

Синтаксис

$expr->exists($subquery)

Пример

Давайте выберем статьи, у которых есть хотя бы один комментарий:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\ORM\Query\Expr; use Doctrine\Persistence\ManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findWithComments(): array { $expr = new Expr(); $sub = $this->createQueryBuilder('c') ->select('1') ->where('c.article = a.id'); $qb = $this->createQueryBuilder('a'); $qb->where($expr->exists($sub->getDQL())); return $qb->getQuery()->getResult(); } } ?>

Результат выполнения кода:

["article 1", "article 2", "article 3"]

Пример

Давайте проверим наличие пользователя с определённым именем через подзапрос:

<?php namespace App\Repository; use App\Entity\User; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\ORM\Query\Expr; use Doctrine\Persistence\ManagerRegistry; class UserRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, User::class); } public function hasUserNamed(string $name): bool { $expr = new Expr(); $sub = $this->createQueryBuilder('u') ->select('1') ->where('u.name = :name') ->setParameter('name', $name); $qb = $this->createQueryBuilder('x'); $qb->select('1') ->where($expr->exists($sub->getDQL())) ->setParameter('name', $name); return (bool) $qb->getQuery()->getOneOrNullResult(); } } ?>

Результат выполнения кода для имени 'abcde':

true

Смотрите также

  • класс Expr,
    который создаёт выражения для запросов
  • метод in,
    который создаёт условие IN
  • метод isNotNull,
    который проверяет значение на NULL
  • метод count,
    который создаёт выражение COUNT
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить