上下文是一个使用 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 服务调用的。