Метод toIterable
Метод toIterable класса Query выполняет
SQL-запрос и возвращает итерируемый результат
Iterable. В отличие от метода getResult,
который загружает все строки в память сразу,
toIterable читает данные построчно, что позволяет
обрабатывать большие объёмы данных без переполнения
памяти. Параметры методу передавать не нужно.
Синтаксис
$res = $query->toIterable();
Пример
Давайте создадим запрос через QueryBuilder и
проитерируем его результат:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$query = $em->createQuery(
'SELECT a FROM AppEntityArticle a'
);
$res = '';
foreach ($query->toIterable() as $article) {
$res .= $article->getTitle() . ' ';
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"article 1 article 2 article 3"
Пример
Давайте передадим параметр в запрос и проитерируем только активные записи:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$query = $em->createQuery(
'SELECT a FROM AppEntityArticle a WHERE a.active = :active'
);
$query->setParameter('active', true);
$res = '';
foreach ($query->toIterable() as $article) {
$res .= $article->getTitle() . ' ';
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"article 1 article 3"
Смотрите также
-
класс
Query,
который представляет собой Doctrine-запрос -
метод
getResult,
который возвращает все результаты запроса -
метод
execute,
который выполняет запрос и возвращает результат -
метод
setParameter,
который задаёт параметр запроса