插入实体时,请说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()上触发任何内容。
任何?
答案 0 :(得分:0)
您对created_at列的注释是什么?如果它正在扩展一个,那么在User类或BaseUser中是否有@PreUpdate注释?
也;尝试相同的事情,但没有$ em-> merge($ user)。我从来没有使用它,我甚至不知道它用于什么,但这可能是问题。