让我们假设我与一个实体的人有一对一的关系
class Person
{
...
/**
* @var Player
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Player", inversedBy="person")
*/
private $player;
...
}
和一个实体播放器
class Player
{
...
/**
* @var Person
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Person", mappedBy="player")
*/
private $person;
...
}
现在,此人正在为该人持有外键。
每次尝试从反面访问某些内容都会失败,例如
$em->getRepository('AppBundle:Player')->findByPerson();
结束于
[学说\ ORM \ ORMException]
您无法搜索关联字段 'AppBundle \ Entity \ Player#person',因为它是反面的 一个协会。查找方法仅适用于拥有副关联。
对拥有方做同样的事情(找到该人的玩家),一切都很好。
我无法弄清楚:我如何从双方访问实体?
我需要这个,因为我需要知道,哪个玩家还没有分配人员,反之亦然。我想,doctrine正在加载相关的实体......对于这种情况,普通的sql似乎更容易解决这个问题?或者我真的要处理dql和连接?
答案 0 :(得分:0)
在你的班级玩家中,你可以试试这个:
class Player
{
...
/**
* @var Person
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Person", mappedBy="player")
* @ORM\JoinColumn(name="person_id", referencedColumnName="id")
*/
private $person;
...
}