【发布时间】:2015-05-13 15:47:36
【问题描述】:
我的代码中有这些实体。
class Review extends BaseEntity {
/** @ORM\OneToOne(targetEntity="Action", mappedBy="review") */
protected $action;
}
class Action extends BaseEntity {
/** @ORM\OneToOne(targetEntity="Review", inversedBy="action") */
protected $review;
}
如您所见,Action 和 Review 之间是 OneToOne 关系。我的问题是我也对我的实体使用软删除,所以当我删除一个实体时,实际上并没有删除,只设置了一个删除日期。稍后在审计跟踪中,我需要显示已删除的评论,当然我还需要来自父操作的信息。我的问题是,我需要建立这种关系 OneToMany 吗?还是有更好的方法?
【问题讨论】:
-
我想我没完全明白你的问题,OneToMany 或 OneToOne 与软删除有什么关系?一个或另一个之间的实际问题是什么?定义关系类型取决于您想对这些实体做什么,而对行为NOT MUCH。
-
确实如此。如果您软删除 OneToOne 关系,拥有方仍将保留对已删除实体的引用,除非您替换/删除/清除该实体,否则您无法关联到新实体。但是如果你这样做了,那么你将失去对所有者实体的引用,并且以后将无法记录更改。
-
哦,我明白了,那么据我所知(不多),您可以按照 您 建议的方式进行操作,使用 OneToMany 关系并验证只保留一个活着,其余的被软删除,这样你就可以有任何试镜的历史。我会尝试在验证中发布答案。
-
好吧,nvm,我的想法是
/** @preRemove */事件,并且在验证时抛出异常(这会回滚事务),但话又说回来,你永远不想删除它......所以。 ..对不起伙计,我的错:(
标签: php doctrine-orm one-to-one soft-delete