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

Php 为什么合并实体会在插入时更新?,php,symfony,doctrine-orm,entity,symfony-2.1,Php,Symfony,Doctrine Orm,Entity,Symfony 2.1,插入实体时,可以说文章: Article::id Article::text Article::author -> User 这篇文章有一位作者 如果我使用实体管理器获取数据库中的用户: $user = $em->find(1); $article = new Article(); $article->text = "balh blah"; $article->user = $user; $em->persist($article); $em->flus

插入实体时,可以说
文章

Article::id
Article::text
Article::author -> User
这篇文章有一位作者

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

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

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

$em->persist($article);
$em->flush();
我只在数据库中插入了正确的内容

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

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

INSERT INTO Article ...
UPDATE user set created="..." WHERE id = 1
而且,如果用户与多个OneToMany关系相同,则它们中的每一个也会更新。知道用户实体没有改变,我不明白为什么
原则
正在执行这些更新。 此外,只有已创建的(datetime)对象被更新,其他字段都不被更新

我没有级联设置,因此它不会触发文章persist()上的任何内容


有人吗?

您对在列中创建的注释是什么?在您的用户类或BaseUser中是否有@PreUpdate注释(如果它是扩展注释的话)


还有,;尝试同样的方法,但不使用$em->merge($user)。我从未使用过它,甚至不知道它的用途,但这可能就是问题所在。

用户或文章中没有生命周期或预更新方法。已创建字段的注释是basic
@ORM\Column(name=“created”,type=“datetime”,nullable=false)
。我必须使用merge,因为用户实体存储在缓存中,entityManager需要在关联完成之前了解它。
$user = $cache->find(1);
$user = $em->merge($user);

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

$em->persist($article);
$em->flush();
INSERT INTO Article ...
UPDATE user set created="..." WHERE id = 1