以一对一的关系从反方输入实体属性

时间:2017-11-15 17:11:09

标签: php doctrine sonata-admin

让我们假设我与一个实体的人有一对一的关系

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和连接?

1 个答案:

答案 0 :(得分:0)

在你的班级玩家中,你可以试试这个:

class Player
{
...
    /**
    * @var Person
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\Person", mappedBy="player")
    * @ORM\JoinColumn(name="person_id", referencedColumnName="id")
    */
    private $person;
...
}

以下是学说文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-bidirectional