Метод any класса Expr
Метод any класса Expr создаёт выражение
ANY для DQL-запросов Doctrine. Оно проверяет,
выполняется ли заданное условие хотя бы для одного
элемента вложенной коллекции. Первым параметром
передаётся выражение сравнения. Обычно применяется
вместе с методами eq, gt, lt и
другими операторами сравнения.
Синтаксис
$expr->any($comparison)
Пример
Давайте выберем статьи, у которых хотя бы один
комментарий имеет рейтинг больше 5:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends EntityRepository
{
public function findByCommentRating(): array
{
$expr = new Expr();
$qb = $this->createQueryBuilder('a');
$qb->innerJoin('a.comments', 'c');
$qb->where(
$expr->any(
$expr->gt('c.rating', 5)
)
);
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте выберем пользователей, у которых хотя бы
одна статья имеет статус true:
<?php
namespace App\Repository;
use App\Entity\User;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class UserRepository extends EntityRepository
{
public function findByPublishedArticle(): array
{
$expr = new Expr();
$qb = $this->createQueryBuilder('u');
$qb->innerJoin('u.articles', 'a');
$qb->where(
$expr->any(
$expr->eq('a.published', true)
)
);
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["user", "abcde", "hello"]