Php 如何使用Doctrine2中的cascade选项使关联的实体自动持久化?

Php 如何使用Doctrine2中的cascade选项使关联的实体自动持久化?,php,symfony,zend-framework,orm,doctrine-orm,Php,Symfony,Zend Framework,Orm,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->flu

谁能给我解释一下:

$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();
为什么在尝试插入数据库时必须调用实体注释

我有理由这样做

这是否意味着如果我在用户实体中与其他实体有50个关系 在尝试调用时,我必须手动调用每个关系 更新/插入/删除? 如果我必须手动执行所有操作,为什么会存在级联? 如果我不得不手动调用所有这些关系,那么使用教义就有点愚蠢了

我不明白。感谢您的帮助


这与此相关:

要让条令自动处理Usercomments属性的持久性,您必须将cascade设置为持久性操作

级联持久、删除、合并、全部选项使您能够

$em->persist($myFirstComment);
。。。例如,如果在双向关系的反向侧正确设置它。 如果您使用cascade remove删除用户实体,它还可以自动删除Usercomments

例如:

/**
 * Bidirectional - One-To-Many (INVERSE SIDE)
 *
 * @OneToMany(targetEntity="Comment", mappedBy="author", cascade={"persist", "remove"})
 */
private $comments;
阅读文档一章中有关关联映射和级联的更多信息

请记住:

条令只会检查关联的拥有方是否有变更

仅对关联的反面所做的更改将被忽略。从条令的角度来看,确保更新双向关联的双方或至少更新拥有方

一方联盟永远不是拥有方。 反向端必须使用OneToOne、OneToMany或ManyToMany映射声明的mappedBy属性。mappedBy属性包含拥有方的关联字段的名称 拥有方必须使用OneToOne、ManyToOne或ManyToMany映射声明的inversedBy属性。inversedBy属性包含反向侧关联字段的名称。 manytone始终是双向关联的拥有方。 一对一总是双向关联的反面。 此外:

如果您创建了一个新的根实体,即$user=new user,但该实体尚未由条令管理,则只需调用persist,如果您正确设置了级联选项,则不必在示例中调用persist on$myFirstComment


否则,如果实体由于某种原因没有分离,您只需调用flush。

I换句话说,如果我进行了级联,为什么我必须调用对其他实体的引用?长话短说:如果我有从一个实体到另一个实体的关联,我必须在插入/更新时始终调用该其他实体。我不能说$user->addCommentsome comment,我必须调用relation,然后执行$user->addCommentsome comment。这是有道理的,但有点愚蠢。如果我有50个亲戚呢?是否在插入/更新时调用每个关系?教义对于选择是伟大的,但如果你有关系,它对其他一切都很糟糕。我必须做50次$this->em->getReference'entity name'…我已经用大量的解释和文档提示回答了您的问题,并附上了代码exmaple。如果答案对您有帮助,请接受它:因为级联操作只关注拥有方的变化-您能解释一下在拥有方和在iverse方设置级联操作的区别吗?双方都有级联选择,我不明白为什么只有一方在观看。