Метод select класса QueryBuilder
Метод select класса QueryBuilder
указывает, какие поля сущности должны
попасть в результат запроса. Первым
параметром передаётся строка или массив
строк с DQL-выражениями выборки. Если
метод не вызвать, Doctrine по умолчанию
выбирает все поля корневой сущности.
Синтаксис
select(string|array $select): self
Пример
Давайте выберем только поля id и title сущности Article:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findTitles(): array
{
return $this->createQueryBuilder('a')
->select('a.id, a.title')
->getQuery()
->getArrayResult();
}
}
?>
Результат выполнения кода:
[
['id' => 1, 'title' => 'article'],
['id' => 2, 'title' => 'hello'],
['id' => 3, 'title' => 'user'],
]
Пример
Давайте передадим массив полей и добавим
агрегатную функцию COUNT:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function countByStatus(): array
{
return $this->createQueryBuilder('a')
->select(['a.status', 'COUNT(a.id) AS cnt'])
->groupBy('a.status')
->getQuery()
->getArrayResult();
}
}
?>
Результат выполнения кода:
[
['status' => 'draft', 'cnt' => 2],
['status' => 'published', 'cnt' => 5],
]
Пример
Давайте выберем поля через
partial и вернём объекты сущности:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findPartial(): array
{
return $this->createQueryBuilder('a')
->select('PARTIAL a.{id, title}')
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
[
Article { id: 1, title: 'article' },
Article { id: 2, title: 'hello' },
]
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы -
метод
addSelect,
который добавляет поля к выборке -
метод
from,
который задаёт корневую сущность -
метод
getQuery,
который возвращает объект Query