DoctrineとのSymfony 3では、同じ主キーを共有している両方のテーブルで1対1の一方向関係を取得しようとしています。これを行うには、例をDoctrine Association Mappingページに複製しようとしています。Doctrine 1対1一方向
しかし、1対1のドキュメントにはセッターとゲッターの例はなく、ターゲットエンティティの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に設定しようとしました。
MySubEntity $ idフィールドをCountryエンティティから自動入力する必要があるのは誰ですか?
最初、私は真= NULL可能で、あなたが名前を持つ2つのフィールドを持っている= ID –
idフィールドに適切ではないと思います。 'nullable = true'は関連する行である可能性があるが、(オプションではない)関係のためのものです。 2つの '$ id'フィールドはそれぞれ独自のEntityに置かれているので、これはうまくいくはずです。 –
'NULL可能= false'を両方' $ id'フィールドに – phpPhil