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

Метод notIn

Метод notIn класса Expr создаёт условие NOT IN для SQL-запроса. Он используется в QueryBuilder для фильтрации записей: результатом выборки станут только те строки, значение указанного поля которых не входит в переданный массив значений. В отличие от метода in, который оставляет совпадения, notIn исключает их из результата. Первым параметром передаётся имя поля, вторым - массив значений для исключения.

Синтаксис

$expr->notIn(string $field, array $values)

Пример

Давайте выберем статьи, идентификатор которых не входит в список [1, 2, 3]:

<?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 findExcluded(): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->notIn('a.id', [1, 2, 3]) ); return $qb->getQuery()->getResult(); } } ?>

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

["article 4", "article 5"]

Пример

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

<?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 findByStatus(): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->notIn('a.status', ['draft', 'archived']) ); return $qb->getQuery()->getResult(); } } ?>

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

["article 1", "article 2"]

Пример

Давайте скомбинируем notIn с другими условиями через метод andX:

<?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 findFiltered(): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->andX( $qb->expr()->notIn('a.id', [1, 2, 3]), $qb->expr()->eq('a.status', ':status') ) ); $qb->setParameter('status', 'published'); return $qb->getQuery()->getResult(); } } ?>

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

["article 4"]

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

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