【发布时间】:2012-08-29 20:51:01
【问题描述】:
我有一个与ArticleVote 一对多关系的类用户,Association Class 本身就是一个Association Class(见下文)。
这是我的实体的样子:
class User
{
protected $articlesVotes;
}
用户持有ArticleVote 集合。
虽然 ArticleVote 由基于 UserId 和 ArticleId 的复合主键引用:
class ArticleVote
{
protected $article;
protected $user;
}
现在,假设我想从User 中删除一个ArticleVote,我自然会这样做$user->getArticlesVotes()->removeElement($articleVote);,这会导致实际删除集合内的实体,但作为@987654332 @既是关系又是实体,数据库中的行根本没有被删除。
我知道,我可以做$em->remove($articleVote);,但我希望我可以从用户集合中删除它以绕过EntityManager,如果我想删除几个$articleVote怎么办?
目前,我通过传递Article 实体在我的User 模型中创建/删除投票,它是我的User 实体,它创建ArticleVote 对象并自行附加它,我希望我可以拥有相同的删除功能的行为。
有什么想法吗? (哦,顺便说一句,我已经尝试过使用 cascade="remove")
【问题讨论】:
-
有一个名为 orphanRemoval 的选项(参见此处:doctrine-orm.readthedocs.org/en/2.0.x/reference/…)可能会起作用。但是您必须确保从文章和用户集合中删除 ArticleVote。
-
@Sgoettschkes,我不确定 orphanRemoval 是否可以在这里工作,我没有删除用户和文章,我正在删除它们之间的关联类。顺便说一下,ArticleVote 实体并没有被 Article 实体反转。
-
看例子,我想这正是你所需要的。您正在从集合中删除一个对象,并希望在数据库中也将其删除。这就是他们在示例中所做的!我不确定它是否在用户和文章中都引用了您的对象,但我会试一试!
-
@Sgoettschkes,该死的你是对的,我被误导了 orphanRemoval 的行为!您可以将其发布为我可以接受的答案吗?
标签: php orm symfony doctrine-orm