Метод all класса Expr
Метод all класса Expr создаёт выражение,
которое возвращает истину, если для всех элементов
коллекции выполняется переданное условие. Первым
параметром передаётся выражение-условие, которое
проверяется для каждого элемента. Метод часто
используется в подзапросах Doctrine для фильтрации
сущностей по связанным коллекциям.
Синтаксис
Expr::all(mixed $expr)
Пример
Давайте получим все статьи, у которых все комментарии
содержат текст 'abcde'. Для этого построим
подзапрос с методом all:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends EntityRepository
{
public function findAllWithAllCommentsText(): array
{
$expr = new Expr();
$sub = $this->createQueryBuilder('c')
->select('1')
->where($expr->all('c.text = :text'));
return $this->createQueryBuilder('a')
->where($expr->exists($sub->getDQL()))
->setParameter('text', 'abcde')
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте проверим, что все числа коллекции больше
значения 5, используя метод all
вместе с методом gt:
<?php
use Doctrine\ORM\Query\Expr;
$expr = new Expr();
$condition = $expr->all(
$expr->gt('n.value', 5)
);
$res = $condition->__toString();
echo $res;
?>
Результат выполнения кода:
"ALL(n.value > 5)"