Показать несколько данных из сущности

Я хочу показать 5 лучших результатов в каждой моей игре. Итак, я сделал эту функцию:

public function records (){
    $em = $this->getDoctrine()->getManager();
    $games = $em->getRepository(Game::class)->findAll();

    foreach($games as $g){
        $records = new ArrayCollection;
        $records = $em->getRepository(Game::class)->findAllRecords($g->getId());
    }


    return $this->render('game/records.html.twig', [            
        'games' => $games,
        'records' => $records,
    ]);
}

Вот функция репозитория:

public function findAllRecords($id){
    $qb = $this->createQueryBuilder('g');

    $qb->select('g.name')
        ->innerJoin('g.Parties', 'p')
        ->innerJoin('p.playeds', 'y')
        ->innerJoin('y.joueur', 'j')
        ->addSelect('y.score')        
        ->addSelect('j.nom, j.prenom')
        ->where('g.id = :id')
        ->setParameter('id', $id)            
        ->orderBy('y.score', 'DESC')
        ->setMaxResults('5');
    var_dump($qb->getDQL());
    $query = $qb->getQuery();
    return $query->getResult();
}

И, наконец, вид:

{% for g in games %}
{{ g.name }}
<table class = "table">
    <tbody>
        <tr>                
            <th>score</th>
        </tr>
            {% for r in records %}
       <tr>
            <td>{{ r.score }}</td>
        </tr>
            {% endfor %}
    </tbody>
</table>
{% endfor %}

Это не совсем работает, так как я просто получаю данные из последнего идентификатора игры. Как я могу показать данные для каждой игры?

Стоит ли изучать 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
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

foreach($games as $g){ $records = new ArrayCollection; $records = $em->getRepository(Game::class)->findAllRecords($g->getId()); }

Вот ваша проблема. Это всегда перезапись. Вы хотите сделать что-то вроде:

$records = new ArrayCollection;
foreach($games as $g) {
  $records[] = $em->......;
}

Это должно решить вашу проблему

Привет, почти получилось. Я получаю «Ключ« оценка »для массива с ключами «0, 1, 2, 3, 4» не существует». Я полагаю, что теперь мне нужно зациклиться на правильном индексе «записей». Что-то вроде этого: {% для r в записях [0] %}. Но как заменить 0 индексным циклом игры для ?

Patrick Rey 26.03.2019 13:59

вы должны иметь возможность сделать {% for r в records[loop.index] %}, что должно дать вам индекс игрового цикла. я не знаю, что означает loop.index в следующем цикле. Но это должно работать для ваших нужд.

Andy 26.03.2019 14:02

Да, я пробовал это, но это выдает ошибку: во время рендеринга шаблона возникло исключение ("Примечание: неопределенный индекс: цикл").

Patrick Rey 26.03.2019 14:09

Мне удалось сделать это, установив атрибут с index.loop внутри игрового цикла: {% set i = loop.index0 %}, а затем использовать это во втором цикле: {% for r в records[i] %}

Patrick Rey 26.03.2019 14:56

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