我正在尝试执行一个获取关联对象,如文档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,
);
}
Run Code Online (Sandbox Code Playgroud)
}
/**
* @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;
Run Code Online (Sandbox Code Playgroud)
这是相当自我解释的.
假设你要为每一个用户有很多车主,你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;
// .........
}
Run Code Online (Sandbox Code Playgroud)
然后你的控制器的代码:
$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
$all = $UserRepo->findOneBy(array('username'=>'macq'));
$owners = $all->getOwners();
if ( $owners){
$allOwner = $all->getOwners()[0]->getName();
}
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
我仍然不相信你的逻辑没有反转.我的想法是" Owner应该包含很多Users",而不是相反...
| 归档时间: |
|
| 查看次数: |
5122 次 |
| 最近记录: |