9 php orm zend-framework symfony doctrine-orm
有人可以解释一下这个:
$user = new User();
/* why do I have to call Entity Comment while trying to insert into db? */
$myFirstComment = new Comment();
$user->addComment($myFirstComment);
$em->persist($user);
$em->persist($myFirstComment);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
为什么我在尝试插入数据库时必须调用实体注释?
我有级联.
如果我必须手动调用所有关系,那么使用Doctrine是一种愚蠢的做法.
我不懂.任何帮助表示赞赏.
Nic*_*ich 19
要让Doctrine自动处理User#comments
属性的持久性,您必须将cascade设置为"persist"操作.
级联(持久,删除,合并,全部)选项使您能够省略...
$em->persist($myFirstComment);
Run Code Online (Sandbox Code Playgroud)
...例如,如果你在双向关系的反面正确设置它.User#comments
如果您使用级联"删除"删除用户实体,它也可以自动删除!
例:
/**
* Bidirectional - One-To-Many (INVERSE SIDE)
*
* @OneToMany(targetEntity="Comment", mappedBy="author", cascade={"persist", "remove"})
*/
private $comments;
Run Code Online (Sandbox Code Playgroud)
阅读文档的Transistive Persistence/Cascade Options一章中有关关联映射和级联的更多信息.
请记住:
Doctrine只会检查协会的拥有方是否有变更.
仅忽略关联的反面更改.确保更新双向关联的两面(或者至少从拥有者的角度来看,从Doctrine的角度来看)
mappedBy
OneToOne,OneToMany或ManyToMany映射声明的属性.该mappedBy
属性包含拥有方的关联字段的名称inversedBy
OneToOne,ManyToOne或ManyToMany映射声明的属性.该inversedBy
属性包含反面的关联字段的名称.此外:
如果你创建一个$user = new User()
尚未由doctrine管理的新的根实体(即),你只需要调用persist($myFirstComment
如果你已经正确设置了cascade选项,你就不必在你的例子中调用persist ).
否则,如果实体由于某种原因未被分离,您只需要调用flush.
归档时间: |
|
查看次数: |
8697 次 |
最近记录: |