Метод between класса Expr
Метод between класса Expr создаёт выражение,
которое проверяет, находится ли значение поля
в указанном диапазоне. Первым параметром передаётся
имя поля или выражение, вторым - нижняя граница
диапазона, третьим - верхняя граница. Метод часто
используется в QueryBuilder для выборки записей
из базы данных.
Синтаксис
$expr->between(field, from, to)
Пример
Давайте создадим запрос, который выберет статьи
с идентификатором в диапазоне от 1 до 5:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->where($qb->expr()->between('a.id', 1, 5));
$res = $qb->getQuery()->getResult();
return $this->json($res);
}
}
?>
Результат выполнения кода:
[
{"id": 1, "title": "article 1"},
{"id": 2, "title": "article 2"},
{"id": 3, "title": "article 3"},
{"id": 4, "title": "article 4"},
{"id": 5, "title": "article 5"}
]
Пример
Давайте проверим вхождение значения в диапазон
с помощью метода between и выведем результат:
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$expr = $em->getExpressionBuilder();
$res = $expr->between('a.price', 100, 500);
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"a.price BETWEEN 100 AND 500"
Пример
Давайте выберем статьи, созданные в заданном
диапазоне дат, используя метод between:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$from = new \DateTime('2024-01-01');
$to = new \DateTime('2024-12-31');
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->where($qb->expr()->between('a.createdAt', ':from', ':to'))
->setParameter('from', $from)
->setParameter('to', $to);
$res = $qb->getQuery()->getResult();
return $this->json($res);
}
}
?>
Результат выполнения кода:
[
{"id": 1, "title": "article 1", "createdAt": "2024-03-15"},
{"id": 2, "title": "article 2", "createdAt": "2024-07-20"}
]