Метод setHint
Метод setHint класса Query позволяет
передать дополнительную инструкцию для внутренних
механизмов Doctrine. Первым параметром передаётся
имя подсказки в виде строки, вторым - её значение.
Например, можно включить пользовательский гидратор
или изменить поведение кэша результатов.
Синтаксис
setHint(string $name, mixed $value): static
Пример
Давайте создадим запрос и добавим подсказку для пользовательского гидратора:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query;
class ArticleRepository
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function findWithHint(): array
{
$query = $this->em->createQuery(
'SELECT a FROM App\Entity\Article a'
);
$query->setHint(
Query::HINT_CUSTOM_OUTPUT_WALKER,
'App\Doctrine\CustomOutputWalker'
);
return $query->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте включим кэширование запроса с помощью
подсказки HINT_ENABLE_RESULT_CACHE:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query;
class ArticleRepository
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function findCached(): array
{
$query = $this->em->createQuery(
'SELECT a FROM App\Entity\Article a'
);
$query->setHint(
Query::HINT_ENABLE_RESULT_CACHE,
true
);
return $query->getResult();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Смотрите также
-
класс
Query,
который представляет собой DQL-запрос -
метод
setParameter,
который привязывает значение к параметру запроса -
метод
setHydrationMode,
который задаёт способ гидратации результатов -
метод
useResultCache,
который включает кэширование результатов запроса