Я хочу объединить одни и те же записи в:
Audi A3 / S3 / RS3
8V / 8Y
Audi A4 / S4 / RS4
B8 / B9
и т. д.
Вот мой код репозитория:
public function cars(): array
{
$conn = $this->getEntityManager()->getConnection();
$sql = 'select car.name as car, model.name as model from car join model on car.id = model.car_id';
$stmt = $conn->prepare($sql);
// returns an array of arrays (i.e. a raw data set)
return $stmt->executeQuery()->fetchAllAssociative();
}
ветка:
{% for car in cars %}
{{ car.car }}
{{ car.model }}
{% endfor %}
контроллер:
public function index(ModelRepository $modelRepository): Response
{
$cars = $modelRepository->cars();
return $this->render('index/index.html.twig', [
'cars' => $cars,
]);
}
Можете ли вы дать мне несколько советов, как заставить его работать правильно?
Что ты имеешь в виду?
Отвечает ли это на ваш вопрос? Реструктурировать многомерный массив на основе ассоциативного ключа массива




Как было сказано в комментариях, нужно реструктурировать полученный массив данных, то есть подготовить нужную структуру данных и передать шаблон в twig.
Метод контроллера:
public function index(ModelRepository $modelRepository): Response
{
$cars = [];
foreach ($modelRepository->cars() as $item) {
$cars[$item['car']][] = $item;
}
return $this->render('index/index.html.twig', [
'cars' => $cars,
]);
}
Ветка:
{% for key, car in cars %}
{{ key }}
{% for item in car %}
{{ item.model }}
{% endfor %}
{% endfor %}
Я не видел твоего ответа. Спасибо за помощь в любом случае. Просто добавил свой способ.
Сначала измените код репозитория с «sql» на querybuilder:
public function cars()
{
return $this->createQueryBuilder('m')
->leftJoin('m.model', 'model')
->addSelect('model')
->addOrderBy('model.car', 'asc')
->getQuery()
->getResult()
;
}
Затем внесите некоторые изменения в Twig:
{% for car in cars %}
{{ car.name }}
{% for model in car.model %}
{{ model.name }}
{% endfor %}
{% endfor %}
Как сейчас написано, ваш ответ неясен. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
Реструктурируйте массив в вашем контроллере перед отправкой в представление