コンテキストは、Doctrine2 を使用する Symfony2 プロジェクト (2.0.23) です。
私は 1 対 1 の関係を持つ Candidate エンティティを持っていWebsite
ます。新しい候補を作成するとき、Website
エンティティを次のように設定します。
Candidate.php :
<?php
use MyProject\Bundle\CoreBundle\Entity\Website;
public function initialize(Website $website)
{
$this->setWebsite($website);
1 対 1 の関係は次のように宣言されます。
<?php
/**
* @var Website $website
*
* @ORM\OneToOne(targetEntity="Website")
* @ORM\JoinColumn(name="Website", referencedColumnName="Code")
*/
private $website;
すべてがローカルで正常に動作します。ただし、テスト サーバーと運用サーバーでは、特定の Web サイトで新しい候補を作成するときに、メイン エンティティを永続化してフラッシュするときに、関連付けられているエンティティがデフォルト値で更新されることCandidate
があります。MySQL ログは次のとおりです。
/*!*/;
# at 11400207
#130628 9:26:32 server id 1 end_log_pos 11400399 Query thread_id=53611133 exec_time=0 error_code=0
SET TIMESTAMP=1372404392/*!*/;
UPDATE website SET Name = NULL, bEnabled = NULL ... WHERE Id = 2 AND Code = 2000
FOSUserBundle のメソッドに固執します。
<?php
/**
* Updates a user.
*
* @param UserInterface $user
* @param Boolean $andFlush Whether to flush the changes (default true)
*/
public function updateUser(UserInterface $user, $andFlush = true)
{
$this->updateCanonicalFields($user);
$this->updatePassword($user);
$this->em->persist($user);
if ($andFlush) {
$this->em->flush();
}
}
理由がわかりません。本当に奇妙なのは、それが時々しか起こらず、静かで予測できないことです。
提案やヒントは大歓迎です...ありがとう。
PS: doctrine メタデータ キャッシュが無効化されました。
Edit1 : 永続化を追加しました。これは FormHandler サービスを介して呼び出されることに注意してください。