我有两个实体:Review
和User
。 User
实体中存在用户的OneToMany关系:
/**
* @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()
getter。
/**
* @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) { } }
填充数据库中的表。你们中的任何一个人能指出我失踪的东西吗?
答案 0 :(得分:0)
您需要首先检索登录用户,然后加载他们的相关实体。
/**
* @Route("/dashboard")
*/
public function dashboardShow() {
// Pulls the currently authenticated user from symfony internals
$user = $this->getUser();
// If your authentication provider already pulls this entity from the database
// you can skip this step and just use $user->getReviews(); below.
$userEntity = $this->get('doctrine')
->getManager()
->getRepository('NamespacedBundle:User')
->findOne($user->getId());
$reviews = $userEntity->getReviews();
return $this->render('dashboard.html.twig', array(
'reviews' => $reviews
));
}
答案 1 :(得分:0)
是的它是空的,因为集合没有被初始化(在转储中也有" #initialized:false")
如何初始化收藏?有更多方法可以做到:
致电
$user->getReviews()-count()
或在存储库中创建自定义SQL函数
$this->createQueryBuilder('user')
->select('user, reviews')
->leftJoin('user.review', 'reviews')
->getQuery()->getResult();