我正在尝试执行一个获取关联对象,如文档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;
Jovan Perovi.. 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",而不是相反...
这是相当自我解释的.
假设你要为每一个用户有很多车主,你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",而不是相反...