Метод isNull класса Expr
Метод isNull класса Expr создаёт выражение для проверки того, что значение указанного поля равно NULL. Метод принимает один параметр - имя поля или выражение, которое нужно проверить. Результат обычно используется в методах where, andWhere или orWhere объекта QueryBuilder.
Синтаксис
$expr->isNull(string $field)
Пример
Давайте выберем все статьи, у которых поле deletedAt равно NULL, то есть не удалённые:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findActive(): array
{
$qb = $this->createQueryBuilder('a');
$qb->where($qb->expr()->isNull('a.deletedAt'));
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте объединим проверку на NULL с другим условием через метод andWhere:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findPublished(): array
{
$qb = $this->createQueryBuilder('a');
$qb->where($qb->expr()->isNull('a.deletedAt'));
$qb->andWhere($qb->expr()->eq('a.status', ':status'));
$qb->setParameter('status', 'published');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 3"]