Symfony2 - OneToMany为空的ArrayCollection

时间:2016-10-12 21:03:38

标签: symfony doctrine-orm

我有两个实体:ReviewUserUser实体中存在用户的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) { } }

填充数据库中的表。你们中的任何一个人能指出我失踪的东西吗?

2 个答案:

答案 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();