Метод indexBy
Метод indexBy класса QueryBuilder задаёт поле,
по значению которого будет проиндексирован результат выборки.
Первым параметром передаётся строка с именем поля или
выражение, возвращающее ключ массива. Если параметр не передан,
индексация отключается.
Синтаксис
indexBy(string $indexBy)
Пример
Давайте проиндексируем результат выборки по полю id:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findIndexed(): array
{
return $this->createQueryBuilder('a')
->select('a')
->indexBy('a', 'a.id')
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
[1 => Article, 2 => Article, 3 => Article]
Пример
Давайте проиндексируем результат выборки по полю string:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findByString(): array
{
return $this->createQueryBuilder('a')
->select('a')
->indexBy('a', 'a.string')
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
['abcde' => Article, 'article' => Article, 'hello' => Article]
Пример
Давайте отключим индексацию, передав пустую строку:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findWithoutIndex(): array
{
return $this->createQueryBuilder('a')
->select('a')
->indexBy('a', '')
->getQuery()
->getResult();
}
}
?>
Результат выполнения кода:
[0 => Article, 1 => Article, 2 => Article]
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы -
метод
select,
который задаёт выбираемые поля -
метод
from,
который задаёт сущность для выборки -
метод
getQuery,
который возвращает объект Query