以下が機能し、行が両方のテーブルに挿入されます。
$user = new User();
$user->setId(8484);
$user->setData("user test data");
$profile = new Profile();
$profile->setBlah(8484);
$profile->setData("profile test data");
// if I leave this out it works...
$user->setProfile($profile);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($user);
$em->flush();
しかし、省略した場合、の id が null で$user->setProfile($profile);
あるため、エラーが発生します。User
An exception occurred while executing 'INSERT INTO User (id, data) VALUES (?, ?)' with params {"1":null,"2":"user test data"}
どうしてですか?
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @ORM\Column(type="string", length=64)
*/
protected $data;
/**
* @ORM\OneToOne(targetEntity="Profile", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="id", referencedColumnName="blah")
*/
protected $profile;
}
class Profile
{
/**
* @ORM\Id
* @ORM\Column(name="blah", type="integer")
*/
protected $blah;
/**
* @ORM\Column(type="string", length=64)
*/
protected $data;
}
プロファイルの設定方法:
/**
* Set Profile
*
* @param \Test\AdminBundle\Entity\Profile $profile
* @return User
*/
public function setProfile(\Test\AdminBundle\Entity\Profile $profile = null)
{
$this->profile = $profile;
return $this;
}
編集:
joinColumn の名前をランダムなものに変更すると、オブジェクトは var_dump を使用して正しく見えますが、クエリは失敗します。
/**
* @ORM\OneToOne(targetEntity="Profile", cascade={"persist"})
* @ORM\JoinColumn(name="random_test", referencedColumnName="blah")
*/
与えます:
An exception occurred while executing 'INSERT INTO User (id, data, random_test) VALUES (?, ?, ?)' with params {"1":8484,"2":"user test data","3":null}: