2016-11-23 1 views
1

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

+0

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() –

Antwort

0

aller Zunächst sollten Sie Lehre verwenden und implementieren. Wenn Sie aus irgendeinem Grund nicht können: Machen Sie eine einzige Abfrage an die Antworten Tabelle verbunden mit den Stimmen eines bestimmten Benutzers. Fragen Sie nach allem, wo sich question_id in [array] befindet (array ist ein Array von Fragen, die Sie bereits haben). Sobald Sie die Zeilen erhalten, prüfen Sie für jede Frage, ob ihre ID in den Zeilen vorhanden ist, die Sie von der DB erhalten haben.