php*_*hil 2 php orm symfony doctrine-orm
在带有 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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我坚持国家实体时,我收到Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails. 检查数据时,我可以看到 Doctrine 试图将 MySubEntity 的 id 设置为 0。
有人知道我需要做什么才能从 Country 实体自动填充 MySubEntity $id 字段吗?
Joe*_*Joe 10
您需要将 JoinColumn 名称属性更改为其他任何内容,但不是 id:
/**
* @ORM\OneToOne(targetEntity="MySubEntity", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="mysubentity_id", referencedColumnName="id", nullable=true)
*/
private $mysubentity;
Run Code Online (Sandbox Code Playgroud)
这是做什么的:JoinColumn 告诉学说关系保存在哪个数据库列中。因此,如果您将其称为 mysub_id,您的主实体将有一个具有该名称的列,其中将保留 referencedColumn 值(您的子实体的 ID)。
如果您说 JoinColumn 名称是您实体的主键已使用的 id,那么您就会发生冲突。
编辑:
我错过了共享相同主键的观点。这有什么具体原因吗?但是如果你真的因为遗留原因需要这样做,要么看看
或者通过更改生成策略(在这种情况下为 NONE 或自定义),自己生成子实体的主键值的可能性
| 归档时间: |
|
| 查看次数: |
9003 次 |
| 最近记录: |