Как объединить дубликаты

Я хочу объединить одни и те же записи в:

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,
    ]);
}

Можете ли вы дать мне несколько советов, как заставить его работать правильно?

Реструктурируйте массив в вашем контроллере перед отправкой в ​​представление

DarkBee 10.05.2022 07:29

Что ты имеешь в виду?

Domin 10.05.2022 09:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как было сказано в комментариях, нужно реструктурировать полученный массив данных, то есть подготовить нужную структуру данных и передать шаблон в 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 %}

Я не видел твоего ответа. Спасибо за помощь в любом случае. Просто добавил свой способ.

Domin 10.05.2022 12:03
Ответ принят как подходящий

Сначала измените код репозитория с «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 %}
    

Как сейчас написано, ваш ответ неясен. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 12.05.2022 03:06

Другие вопросы по теме