ich ein Projekt mit Symfony + MongoDB als Backend ein Angular2 als Frontend gebaut haben. Ich werde versuchen, meine Frage so gut wie möglich zu erklären, um die beste Antwort zu erhalten.eine Reihe von Fragen zu haben, muss ich innerhalb jeder Fragen keine Antwort, wenn der Benutzer überprüfen, stimmen
Meine Einheiten sind:
Frage Antwort Vote
Jede Frage viele Antworten haben kann und jede viele Stimmen beantworten. Ein Benutzer kann eine Antwort (und nur eine) für jede Frage wählen.
Gut. Ich habe einen Controller, der eine Reihe von Fragen für die Homepage
zurückgibt.public function getQuestions(ParamFetcher $paramFetcher) {
$em = $this->get('doctrine_mongodb')->getManager();
$questionRepo = $em->getRepository('ThisOrThisBaseBundle:Question');
$categoryRepo = $em->getRepository('ThisOrThisBaseBundle:QuestionCategory');
$page = $paramFetcher->get('page',1);
$categoryId = $paramFetcher->get('categoryId',false);
$category = ($categoryId) ? $categoryRepo->findOneById($categoryId) : false;
$dev = $questionRepo->findQuestionsPaginated($category,$page-1);
$view = View::create()->setData($dev->toArray(false));
return $this->get('fos_rest.view_handler')->handle($view);
}
Nichts besonderes. Was ich will, ist das Folgende: Für jede Frage bekommen, wenn der Benutzer eine seiner Antworten abstimmen, so kann ich ein Etikett in der Frontend markieren die Antwort, die der Benutzer gewählt.
Mein Zweifel ist über die beste Option, dies zu tun. Ich Sache über:
- alle Fragen holen iterieren durch das Array Fragen in php, und eine Abfrage für jede Frage stellen, die Abstimmung zu erhalten (falls vorhanden)
- Da die Fragen Array mit Feuchtigkeit versorgt ist, iterieren mit PHP sucht nach der Stimme.
- Vielleicht andere Option, die nicht zu meinem Kopf kommt. a Many-To-One mit einer notwendigen Methoden für Ihr Problem
Dank
Ich denke, die beste Idee ist, das mit vielen Beziehungen in Ihren Entitäten und in Ihrem Repository zu tun: Question-> getAnswers ($ user); Iteriere auf Antworten, um ein Array von Antworten zu füllen, und nach Answer-> getVotes(), um das letzte Array zu füllen. Answer-> getVotes() –