我正在尝试执行一个获取关联对象,如文档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;
答案 0 :(得分:5)
它可以自我解释。
假设您希望每个用户拥有许多所有者,则User::$owner
类成员确实包含Collection
个Owner
个对象。因此,您无法在此处使用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"而不是相反......