Ich habe zwei Einheiten: Review
und User
. Es gibt einen OneToMany Beziehung des Benutzers in User
Einheit:Symfony2 - OneToMany leer ArrayCollection
/**
* @ORM\OneToMany(targetEntity="Review", mappedBy="owner")
*/
protected $reviews;
public function __construct() {
parent::__construct();
$this->reviews = new \Doctrine\Common\Collections\ArrayCollection();
}
Und Verbindung in Review
Einheit sieht aus wie folgt:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="reviews")
* @ORM\JoinColumn(name="owner_id", referencedColumnName="id")
*/
private $owner;
In einem Controller, ich versuche, für angemeldete Benutzer alle Bewertungen zu erhalten. Also benutze ich einen getReviews()
Getter von der Konsole generiert.
/**
* @Route("/dashboard")
*/
public function dashboardShow() {
$user = new User();
$reviews = $user->getReviews();
return $this->render('dashboard.html.twig', array(
'reviews' => $reviews
));
}
Aber $reviews
scheint leer, wenn ich es Dump, die ich erhalten: object(Doctrine\Common\Collections\ArrayCollection)#285 (1) { ["elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } }
Tabellen in der Datenbank bestückt sind. Könnte irgendjemand von euch mir zeigen, was ich vermisse?
Sie machen eine neue User-Einheit machen, die leer natürlich sein wird. Sie sollten den Benutzer aus der Datenbank laden oder die Bewertungen mit einer Methode wie $ user-> addReview ($ review); . Wenn Sie ALLE Bewertungen sehen möchten, brauchen Sie keine Beziehung. –
@Frankbeen, danke für die Antwort! Ich wollte Bewertungen nur für den Benutzer erhalten (Bewertungen mit 'owner_id' = aktuell angemeldete Benutzer-ID). Es ist mir gelungen, die Problemumgehung zu umgehen, indem ich manuell eine Abfrage mit dem QueryBuilder von Doctrine erstelle - ich dachte, Getter wäre eine bessere Methode, um diese Daten zu erhalten, aber es scheint, dass der Query Builder auch funktioniert. – jwitos
Wenn Sie den aktuell angemeldeten Benutzer haben möchten, können Sie einfach die Methode $ user = $ this-> getUser() im Controller verwenden. Oder in Ihrer Situation: $ reviews = $ this-> getUser() -> getReviews(); –