Symfony 2 Doctrine 2尝试调用类“Doctrine \ ORM \ PersistentCollection”的名为“getName”的未定义方法

时间:2016-01-03 16:55:41

标签: symfony doctrine

我正在尝试执行一个获取关联对象,如文档symfony 2中所示。它向我显示了一个错误,如标题这篇文章。我做错了什么?

public function indexAction( )       


{

$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
 $all = $UserRepo->findOneBy(array('username'=>'macq'));
 $allOwner = $all->getOwner()->getName();

    return array(
    'allOwner'=>$allOwner,
     );
}

}

/**
 * @ORM\ManyToOne(
 *      targetEntity ="User\UserBundle\Entity\User",
 *      inversedBy ="owner"
 * )
 * @ORM\JoinColumn(
 *      name = "user_id",
 *      referencedColumnName ="id",
 *      
 * )
 */
protected $user;


**
 * @ORM\OneToMany(
 *      targetEntity ="Property\ManagementBundle\Entity\Owner",
 *      mappedBy ="user"
 * )
 */
protected $owner;

1 个答案:

答案 0 :(得分:5)

它可以自我解释。

假设您希望每个用户拥有许多所有者,则User::$owner类成员确实包含CollectionOwner个对象。因此,您无法在此处使用getName()。如果这实际上是你的意图,你应该命名你的类memeber $owners - 这将极大地帮助你区分集合和持久对象。

我相信你应该有这样的事情:

class User{

    // ........

    /**
     * @ORM\OneToMany(targetEntity ="Property\ManagementBundle\Entity\Owner", mappedBy ="user")
     */
    protected $owners;

    // .........
}

class Owner {

    // ........

    /**
     * @ORM\ManyToOne(targetEntity ="User\UserBundle\Entity\User", inversedBy ="owners")
     * @ORM\JoinColumn(name = "user_id",referencedColumnName ="id")
     */
    protected $user;

    // .........
}

然后你的控制器的代码:

$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
$all = $UserRepo->findOneBy(array('username'=>'macq'));
$owners = $all->getOwners();

if ( $owners){
    $allOwner = $all->getOwners()[0]->getName();
}

这有帮助吗?

我仍然不相信你的逻辑没有反转。我的想法是" Owner应该包含许多User s"而不是相反......