【发布时间】:2017-04-27 10:20:41
【问题描述】:
在带有 Doctrine 的 Symfony 3 中,我试图获得一个一对一的单向关系,两个表共享相同的主键工作。为此,我试图在Doctrine Association Mapping 页面上复制该示例。
但是,一对一的 uni 文档没有 setter 和 getter 的示例 - 也没有目标实体上 id 字段的定义。所以我试着在自己周围做实验。
这些是我的实体:
class Country
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="MySubEntity", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=true)
*/
private $mysubentity;
[...]
/**
* @return MySubEntity
*/
public function getMySubEntity()
{
return $this->mysubentity;
}
/**
* @param MySubEntity $mysubentity
*/
public function setMySubEntity($mysubentity)
{
$this->mysubentity = $mysubentity;
}
}
class MySubEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
[..]
/**
* Set id
*
* @param $id
*
* @return MySubEntity
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
}
当我坚持国家实体时,我收到Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails。检查数据时,我可以看到 Doctrine 试图将 MySubEntity 的 id 设置为 0。
有人知道我需要做什么才能从 Country 实体自动填充 MySubEntity $id 字段吗?
【问题讨论】:
-
首先,我认为 nullable= true 不适合 id 字段
-
你有两个 name=id 的字段
-
nullable=false用于两个$id字段。nullable=true用于关系,因为可以是关联的行,但不必(可选)。两个$id字段中的每一个都位于各自的实体中,所以应该没问题。
标签: php symfony doctrine-orm orm