Метод substring класса Expr
Метод substring класса Expr создаёт SQL-выражение
для извлечения подстроки из строкового поля. Первым параметром
передаётся выражение или имя поля, вторым - начальная позиция
(нумерация с единицы), третьим - длина извлекаемой части.
Метод возвращает объект Expr, который можно использовать
в методах where, andWhere и других.
Синтаксис
$expr->substring(string $field, int $start, int $length)
Пример
Давайте выберем первые три символа из поля name:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends EntityRepository
{
public function findShortNames(): array
{
$expr = new Expr();
$res = $this->createQueryBuilder('a')
->select($expr->substring('a.name', 1, 3) . ' AS shortName')
->getQuery()
->getResult();
return $res;
}
}
?>
Результат выполнения кода:
[["shortName" => "abc"], ["shortName" => "def"]]
Пример
Давайте извлечём подстроку начиная с четвёртого символа без указания длины:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends EntityRepository
{
public function findSuffixes(): array
{
$expr = new Expr();
$res = $this->createQueryBuilder('a')
->select($expr->substring('a.text', 4) . ' AS suffix')
->getQuery()
->getResult();
return $res;
}
}
?>
Результат выполнения кода:
[["suffix" => "de"], ["suffix" => "article"]]
Пример
Давайте используем метод substring в условии where
для фильтрации записей:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends EntityRepository
{
public function findByPrefix(string $prefix): array
{
$expr = new Expr();
$res = $this->createQueryBuilder('a')
->where($expr->eq(
$expr->substring('a.name', 1, 2),
$expr->literal($prefix)
))
->getQuery()
->getResult();
return $res;
}
}
?>
Результат выполнения кода для $prefix = 'ab':
[Article { id: 1, name: "abcde" }]