我是一个与ArticleVote
有一对多关系的班级用户,其本身就是Association Class
(见下文)。
以下是我的实体的样子:
class User
{
protected $articlesVotes;
}
用户持有ArticleVote
集合。
虽然基于UserId
和ArticleId
的复合主键引用了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”)
答案 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”级联,并且与删除的用户相关的文章投票将随之删除。