Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai une tables d'association 'testsquestions ' entre table 'tests' et 'questions' donc j'ai questions belongs to many tests and tests belongs to many questions et testsquestions belongs to tests et questions aussi j'ai une table responses belongs to question et tablequestions has many responses .
Je veux afficher le nom du test suivis de ses questions et chaque question suivie de ses reponses de cette façon
Nom du test
1) question num 1
j'ai fait ce code mais je ne suis pas convaincu je veux utiliser notion du matching dans la méme requete mais j'ai pas reussi
donc j'ai fait ces lignes dans le TestQuestionsController
public function test($id=null)
{
$tests=$this->TestsQuestions->Tests->findById($id)->contain(['Questions']);
$responses=$this->TestsQuestions->Questions->find()->contain(['Responses']);
$this->set(compact('tests','responses'));
$this->set('_serialize', ['tests','responses']);
}
et dans la vue
<?php
foreach ($tests as $test):?>
<?php echo $test->title ;?>
<?php foreach ($test->questions as $ques):?>
<?php echo $ques->title ;?>
<?php foreach ($responses->responses as $res):?>
<?php if (($ques->id)===($res->question_id))
{
echo '<br>'. $res->response ;
}?>
<?php endforeach;
endforeach;
endforeach;
j'ai affiché le nom du test et ses questions mes les reponses ne sont pas affichés
Merci en avance , est ce qui'ya d'autres solution plus optimisée
Bonjour.
Tu ne te tromperais pas quelque part ?
Normalement, une question n'appartient qu'à un seul test.
Donc pourquoi définir une question à plusieurs tests ?
Je verrais plutôt :
Donc seulement trois tables et tu pourrais faire :
public function test($id)
{
$test = $this->Tests
->find()
->where(['Tests.id' => $id])
->contain(['Questions', 'Questions.Responses'])
->first();
$this->set(compact('test'));
}
Puis dans ta vue :
<h2><?= $test->title ?></h2>
<ol>
<?php foreach($test->questions as $question): ?>
<li>
<?= $question->title ?>
</li>
<ul>
<?php foreach($question->responses as $response): ?>
<li><?= $response->title ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
</ol>