Метод notLike класса Expr
Метод notLike класса Expr создаёт выражение
NOT LIKE для запросов Doctrine. Он используется
вместе с QueryBuilder и принимает первым
параметром имя поля сущности, а вторым - шаблон, которому
поле не должно соответствовать. Метод возвращает объект
Expr, который затем передаётся в методы
where или andWhere. В шаблоне можно
использовать спецсимволы % (любая строка) и
_ (один символ).
Синтаксис
public function notLike(string $field, string $pattern): Expr
Пример
Давайте выберем статьи, название которых не начинается
с 'abcde', используя notLike:
<?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 findNotStartingWithAbcde(): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr();
$qb->where($expr->notLike('a.title', 'abcde%'));
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте исключим статьи, название которых заканчивается
на 'article', и выведем оставшиеся заголовки:
<?php
namespace App\Controller;
use App\Repository\ArticleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_list')]
public function list(ArticleRepository $repository): Response
{
$qb = $repository->createQueryBuilder('a');
$expr = $qb->expr();
$qb->where($expr->notLike('a.title', '%article'));
$res = $qb->getQuery()->getResult();
$titles = array_map(fn($article) => $article->getTitle(), $res);
return new Response(implode(', ', $titles));
}
}
?>
Результат выполнения кода для подходящих статей:
"abcde, user, hello"