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




foreach($games as $g){
$records = new ArrayCollection;
$records = $em->getRepository(Game::class)->findAllRecords($g->getId());
}
Вот ваша проблема. Это всегда перезапись. Вы хотите сделать что-то вроде:
$records = new ArrayCollection;
foreach($games as $g) {
$records[] = $em->......;
}
Это должно решить вашу проблему
вы должны иметь возможность сделать {% for r в records[loop.index] %}, что должно дать вам индекс игрового цикла. я не знаю, что означает loop.index в следующем цикле. Но это должно работать для ваших нужд.
Да, я пробовал это, но это выдает ошибку: во время рендеринга шаблона возникло исключение ("Примечание: неопределенный индекс: цикл").
Мне удалось сделать это, установив атрибут с index.loop внутри игрового цикла: {% set i = loop.index0 %}, а затем использовать это во втором цикле: {% for r в records[i] %}
Привет, почти получилось. Я получаю «Ключ« оценка »для массива с ключами «0, 1, 2, 3, 4» не существует». Я полагаю, что теперь мне нужно зациклиться на правильном индексе «записей». Что-то вроде этого: {% для r в записях [0] %}. Но как заменить 0 индексным циклом игры для ?