Метод not класса Expr
Метод not класса Expr возвращает объект выражения,
который инвертирует переданное ему условие. В качестве параметра
принимается строка с выражением или объект Expr.
Обычно используется совместно с методом where для исключения
записей, удовлетворяющих некоторому условию.
Синтаксис
$expr->not(string|Expr $expression)
Пример
Давайте выберем все статьи, кроме тех, у которых id равен 1:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findAllExcept(int $id): array
{
return $this->createQueryBuilder('a')
->where($this->expr()->not('a.id = :id'))
->setParameter('id', $id)
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
["article 2", "article 3"]
Пример
Давайте скомбинируем not с методом eq для исключения статей по имени:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findAllExceptName(string $name): array
{
$expr = $this->expr();
return $this->createQueryBuilder('a')
->where($expr->not($expr->eq('a.name', ':name')))
->setParameter('name', $name)
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода для 'abcde':
["article", "hello"]