Метод neq класса Expr
Метод neq класса Expr создаёт выражение для сравнения
поля с значением по принципу "не равно". Первым параметром
передаётся имя поля или выражение, вторым - значение для сравнения.
Метод возвращает строку сравнения, которую можно использовать
в методах where, andWhere и orWhere.
Метод neq является сокращением от "not equal" и полностью
эквивалентен оператору <> в SQL.
Синтаксис
public function neq(string $field, mixed $value): string
Пример
Давайте найдём всех пользователей, чей возраст не равен 30:
<?php
namespace App\Repository;
use App\Entity\User;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
class UserRepository extends EntityRepository
{
public function findNotAge30(): array
{
$qb = $this->createQueryBuilder('u');
$expr = $qb->expr();
$qb->where($expr->neq('u.age', 30));
return $qb->getQuery()->getResult();
}
}
?>
В результате будет выполнен следующий SQL-запрос:
SELECT u.* FROM user u WHERE u.age <> 30
Пример
Давайте найдём статьи, у которых заголовок не равен 'hello':
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findNotHello(): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr();
$qb->where($expr->neq('a.title', ':title'))
->setParameter('title', 'hello');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["article", "user", "abcde"]
Пример
Давайте скомбинируем метод neq с другими условиями
через логическое И:
<?php
namespace App\Repository;
use App\Entity\Product;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function findActiveNotDraft(): array
{
$qb = $this->createQueryBuilder('p');
$expr = $qb->expr();
$qb->where(
$expr->andX(
$expr->neq('p.status', ':draft'),
$expr->eq('p.active', ':active')
)
)
->setParameter('draft', 'draft')
->setParameter('active', true);
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]