0

上下文是一个使用 Doctrine2 的 Symfony2 项目(2.0.23)。

我有一个具有一对一关系的候选实体Website。创建新候选人时,我将Website实体设置如下:

候选人.php

<?php

use MyProject\Bundle\CoreBundle\Entity\Website;

public function initialize(Website $website)
{
    $this->setWebsite($website);

一对一关系声明如下:

<?php

/**
 * @var Website $website
 *
 * @ORM\OneToOne(targetEntity="Website")
 * @ORM\JoinColumn(name="Website", referencedColumnName="Code")
 */
private $website;

在本地一切正常。但是在测试和生产服务器上,当使用给定网站创建新候选时,有时关联实体会在持久化和刷新主实体时使用默认值更新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:学说元数据缓存已停用。

Edit1:添加了持久化,注意这是通过 FormHandler 服务调用的。

4

1 回答 1

0

好吧,它似乎与具有 2 个@ORM\Id注释的主要实体有关。由于它是一个旧数据库,它对“Doctrine”不友好。有一个自动增量字段的 PK,但连接是在第二列上进行的。所以我删除@ORM\Id了 PK 字段的注释。

于 2013-08-28T10:26:50.597 回答