Метод iterateAssociative
Метод iterateAssociative класса Connection выполняет
SQL-запрос и возвращает итератор для ленивого обхода строк.
В отличие от fetchAllAssociative, который загружает
все строки в память сразу, этот метод выдаёт по одной строке
за итерацию. Первым параметром передаётся SQL-запрос,
вторым - массив значений для подстановки в параметры,
третьим - массив типов этих значений.
Синтаксис
public function iterateAssociative(string $query, array $params = [], array $types = []): iterable
Пример
Давайте получим итератор по всем статьям из таблицы article:
<?php
namespace AppController;
use DoctrineDBALConnection;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Connection $connection): Response
{
$sql = 'SELECT id, title FROM article';
$iterator = $connection->iterateAssociative($sql);
foreach ($iterator as $row) {
echo $row['id'] . ': ' . $row['title'] . '<br>';
}
return new Response();
}
}
?>
Результат выполнения кода:
1: article 1<br>
2: article 2<br>
3: article 3<br>
Пример
Давайте передадим значение для параметра запроса:
<?php
namespace AppController;
use DoctrineDBALConnection;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(Connection $connection): Response
{
$sql = 'SELECT id, title FROM article WHERE title = ?';
$iterator = $connection->iterateAssociative($sql, ['abcde']);
foreach ($iterator as $row) {
echo $row['id'] . ': ' . $row['title'];
}
return new Response();
}
}
?>
Результат выполнения кода:
5: abcde
Смотрите также
-
класс
Connection,
который управляет подключением к базе данных -
метод
fetchAllAssociative,
который возвращает все строки сразу -
метод
fetchAssociative,
который возвращает одну строку -
метод
executeQuery,
который выполняет запрос и возвращает результат