插入实体时,可以说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() 上的任何内容。
任何人?