0
当插入一个实体,让说article
:为什么合并的实体更新插入?
Article::id
Article::text
Article::author -> User
文章有一个作者(多对一)
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()上触发任何东西。
有人吗?
用户或文章中没有生命周期或preUpdate方法。创建字段的注释是基本的'@ORM \ Column(name =“created”,type =“datetime”,nullable = false)'。我必须使用合并,因为用户实体存储在缓存中,并且entityManager需要在关联完成之前知道它。 – maxwell2022 2013-05-10 02:25:42