Метод concat класса Expr
Метод concat класса Expr выполняет
конкатенацию строк в DQL-запросах Doctrine.
Он принимает два и более аргументов и объединяет
их в одну строку. Метод возвращает объект
Expr, который можно использовать в
дальнейшем построении запроса.
Синтаксис
$expr->concat(string $arg1, string $arg2, ...)
Пример
Давайте создадим QueryBuilder и выполним конкатенацию двух полей:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
class ArticleRepository extends EntityRepository
{
public function findConcatenated(): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr();
$qb->select($expr->concat('a.title', 'a.text'))
->from(Article::class, 'a');
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте добавим разделитель между строками:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findWithSeparator(): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr();
$qb->select($expr->concat('a.title', ':separator', 'a.text'))
->setParameter('separator', ' - ')
->from(Article::class, 'a');
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте используем метод concat
в условии where:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findByFullName(string $value): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr();
$qb->select('a')
->from(Article::class, 'a')
->where($expr->concat('a.title', 'a.text') . ' LIKE :value')
->setParameter('value', '%' . $value . '%');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода для строки 'hello':
[["title" => "article", "text" => "hello"]]