0

コンテキストは、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 サービスを介して呼び出されることに注意してください。

4

1 に答える 1

0

@ORM\Idそれは、2 つの注釈が付けられたメイン エンティティに関連していたようです。これは古いデータベースであるため、"Doctrine" フレンドリーではありません。自動インクリメント フィールドの PK がありますが、結合は 2 番目の列で行われます。@ORM\Idそのため、PK フィールドの注釈を削除しました。

于 2013-08-28T10:26:50.597 に答える