In Symfony habe ich zwei Entitäten (Frage, Antwort), die miteinander verwandt sind. Die Beziehung zwischen den beiden Entitäten ist ONE to MANY (eine Frage kann viele Antworten haben) Nach der Symfony-Dokumentation zu den Beziehungen zwischen zwei Entitäten verwende ich ein Frage_id-Feld, das von Symfony in der Antworteinheit generiert wurde. Mit einer Abfrage in meinem Frageentitätsrepository versuche ich eine Frage mit allen Antworten zu erhalten, aber nach der Dokumentation Joining Related Records in Symfony über das Verknüpfen verwandter Datensätze kann ich nicht verstehen, wie Aliase in Symfony funktionieren. Wäre wirklich etwas Hilfe beim Verstehen von Aliasen zu schätzen. Danke Das ist, was ich in meiner Frage Repository-Klasse und in meinem Controller habe. Im Moment bekomme ich ein einziges Antwortergebnis statt aller Antworten, die sich auf meine Frage beziehen.Symfony Query Builder und Aliase
public function findOneByIdJoinedToCategory($questionId)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT a, q FROM QuizBundle:Answer a
JOIN a.answers q
WHERE a.id = :id'
)->setParameter('id', $questionId);
try {
return $query->getOneOrNullResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
public function showAction($answerId)
{
$product = $this->getDoctrine()
->getRepository('QuizBundle:Answer')
->findOneByIdJoinedToCategory($answerId);
$data = $product->getAnswer();
return new Response($data);
// ...
}
Beziehung zwischen meinen Einheiten:
class Answer
{
/**
* @ORM\ManyToOne(targetEntity="Question", inversedBy="answers")
* @ORM\JoinColumn(name="question_id", referencedColumnName="id")
*/
private $question;
public function setQuestion(\QuizBundle\Entity\Question $question = null)
{
$this->question = $question;
return $this;
}
/**
* Get question
*
* @return \QuizBundle\Entity\Question
*/
public function getQuestion()
{
return $this->question;
}
}
class Question
{
/**
* @ORM\OneToMany(targetEntity="Answer", mappedBy="question")
*/
private $answers;
public function __construct()
{
$this->answers = new ArrayCollection();
}
public function addAnswer(\QuizBundle\Entity\Answer $answer)
{
$this->answers[] = $answer;
return $this;
}
/**
* Remove answer
*
* @param \QuizBundle\Entity\Answer $answer
*/
public function removeAnswer(\QuizBundle\Entity\Answer $answer)
{
$this->answers->removeElement($answer);
}
/**
* Get answers
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAnswers()
{
return $this->answers;
}
}
Ich schlage vor, die Methode zu verwenden 'getOneOrNullResult()' 'statt getSingleResult()', wenn Sie nur die Ausnahme fangen für die Rückgabe 'null'. – marc
Kannst du den relevanten Code posten, der die Beziehung der Lehre zwischen Frage und Antwort zeigt? wahrscheinlich brauchst du keinen komplexen DQL, aber du könntest einfach durch die Relationen navigieren .... (Als Beispiel such einfach nach der Antwort dann mach '$ answer-> getQuestions() ') lass es mich wissen – Matteo
@Matteo überprüfe den bearbeiteten Post. In meinem Code bekomme ich im Moment nur eine einzige Antwort, aber es gibt zwei Antworten auf meine Frage. Die Frage-ID wird in der Antwort-Entität im Feld question_id referenziert. – Otonel