2013-05-09 39 views
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()上触发任何东西。

有人吗?

回答

0

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

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

+0

用户或文章中没有生命周期或preUpdate方法。创建字段的注释是基本的'@ORM \ Column(name =“created”,type =“datetime”,nullable = false)'。我必须使用合并,因为用户实体存储在缓存中,并且entityManager需要在关联完成之前知道它。 – maxwell2022 2013-05-10 02:25:42

相关问题