为什么在插入时更新合并实体?

时间:2013-05-09 07:06:49

标签: php symfony doctrine-orm entity symfony-2.1

插入实体时,请说article

Article::id
Article::text
Article::author -> User

该文章有一位作者(ManyToOne)

User::id
User::name
User::created

如果我使用实体管理器获取数据库中的用户:

$user = $em->find(1);

$article = new Article();
$article->text = "balh blah";
$article->user = $user;

$em->persist($article);
$em->flush();

我只有一个插入数据库是正确的。

INSERT INTO Article ...

现在,如果我使用存储在会话(或缓存)中的用户:

$user = $cache->find(1);
$user = $em->merge($user);

$article = new Article();
$article->text = "balh blah";
$article->user = $user;

$em->persist($article);
$em->flush();

我可以在mysql中看到2个查询:

INSERT INTO Article ...
UPDATE user set created="..." WHERE id = 1

如果用户是更多的OneToMany关系,那么每个人都会更新。知道用户实体没有改变我不明白为什么Doctrine正在执行这些更新。 此外,只有更新的创建(日期时间)对象,其他任何字段都不会更新。

我没有级联设置,所以它不应该在Article persist()上触发任何内容。

任何?

1 个答案:

答案 0 :(得分:0)

您对created_at列的注释是什么?如果它正在扩展一个,那么在User类或BaseUser中是否有@PreUpdate注释?

也;尝试相同的事情,但没有$ em-> merge($ user)。我从来没有使用它,我甚至不知道它用于什么,但这可能是问题。