У меня есть два объекта: Review
и User
. Существует OneToMany отношения пользователя в User
лица:Symfony2 - OneToMany empty ArrayCollection
/**
* @ORM\OneToMany(targetEntity="Review", mappedBy="owner")
*/
protected $reviews;
public function __construct() {
parent::__construct();
$this->reviews = new \Doctrine\Common\Collections\ArrayCollection();
}
И соединение в Review
лица выглядит, как показано ниже:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="reviews")
* @ORM\JoinColumn(name="owner_id", referencedColumnName="id")
*/
private $owner;
В контроллере я стараюсь, чтобы получить все отзывы для зарегистрированных пользователей. Таким образом, я использую генератор getReviews()
, сгенерированный с консоли.
/**
* @Route("/dashboard")
*/
public function dashboardShow() {
$user = new User();
$reviews = $user->getReviews();
return $this->render('dashboard.html.twig', array(
'reviews' => $reviews
));
}
Но $reviews
кажется пустым, когда я сбросить его, я получаю: object(Doctrine\Common\Collections\ArrayCollection)#285 (1) { ["elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(0) { } }
Таблицы в базе данных заполняются. Может ли кто-нибудь из вас указать мне, что мне не хватает?
Вы сделать новый пользовательский объект, который будет пустым, конечно. Вы должны загрузить пользователя из базы данных или добавить отзывы с помощью метода $ user-> addReview ($ review); , Если вы хотите видеть ВСЕ обзоры, то вам не требуется релиз. –
@Frankbeen, спасибо за ответ! Я хотел получить отзывы только для пользователя (отзывы с 'owner_id' = текущий идентификатор пользователя). Мне удалось обходным путем вручную создать запрос с Querybuilder doctrine - я думал, что getter - лучший способ получить эти данные, но похоже, что построитель запросов тоже работает. – jwitos
, если вы хотите иметь зарегистрированного пользователя, тогда вы можете просто использовать метод $ user = $ this-> getUser() в контроллере. Или в вашей ситуации: $ review = $ this-> getUser() -> getReviews(); –