如何在使用关联类时删除实体?

时间:2012-09-05 07:12:52

标签: php orm symfony doctrine-orm

我是一个与ArticleVote有一对多关系的班级用户,其本身就是Association Class(见下文)。

以下是我的实体的样子:

class User
{
    protected $articlesVotes;
}

用户持有ArticleVote集合。

虽然基于UserIdArticleId的复合主键引用了ArticleVote:

class ArticleVote
{
    protected $article;
    protected $user;
}

现在,假设我要从ArticleVote删除User,我自然会$user->getArticlesVotes()->removeElement($articleVote);,这会导致实际删除集合中的实体但由于ArticleVote既是关系又是实体,因此根本不会删除数据库中的行。

我知道,我可以$em->remove($articleVote);但我希望我可以将其从用户集合中移除以绕过EntityManager,如果我想删除多个$articleVote该怎么办?

目前,我通过传递User实体创建/删除了我的Article模型中的投票,并且它是创建User对象的ArticleVote实体,并将其自身附加,我希望我可以对删除功能有相同的行为。

有什么想法吗? (哦,顺便说一句,我已经尝试过cascade =“remove”)

1 个答案:

答案 0 :(得分:1)

我昨天遇到了这个问题。设置cascade =“remove”时,将删除UnitOfWork中标记的关联。但是,要从数据库中删除项目,您需要在ArticlesVote实体中标记$ user属性以在删除时级联。像这样......

class ArticleVote
{
    protected $article;

    /**
     * @ManyToOne(targetEntity=....
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $user;
}

这会在数据库中为外键添加“on delete”级联,并且与删除的用户相关的文章投票将随之删除。