我的News
实体通过joinerNewsDocument
实体与Document
实体连接,并带有一些额外字段:News->新闻文档<-文档
/**
* @ORMEntity
* @ORMTable(name="news_document")
* @UniqueEntity(
* fields={"news", "document"}
* )
*/
class NewsDocument
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityDocument", inversedBy="news")
* @ORMJoinColumn(nullable=false)
*/
private $document;
/**
* @ORMManyToOne(targetEntity="AppEntityNews", inversedBy="documents")
* @ORMJoinColumn(nullable=false)
*/
private $news;
/**
* @ORMColumn(type="integer")
*/
private $position;
我的News
实体
/**
* @ORMOneToMany(targetEntity="AppEntityNewsDocument", mappedBy="news", cascade={"persist"})
* @ORMOrderBy({"position" = "ASC"})
*/
private $documents;
public function getNewsDocuments()
{
return $this->documents;
}
当我试图删除在News
实体的documents
字段上迭代的每个NewsEntity
时,NewsEntity
并没有从DB中删除。
$news = $this->entityManager->getRepository(News::class)->find(26);
foreach($news->getNewsDocuments() as $newsDocument) {
$this->entityManager->remove($newsDocument);
}
$this->entityManager->remove($news);
$this->entityManager->flush();
删除了News
,但没有删除NewsDocument
。
但是,以下代码可以删除这两个实体。
$news = $this->entityManager->getRepository(News::class)->find(26);
$newsDocument = $this->entityManager->getRepository(NewsDocument::class)->find(1);
$this->entityManager->remove($newsDocument);
$this->entityManager->remove($news);
$this->entityManager->flush();
我不明白为什么第一个代码不能从DB中删除NewsDocument
。
我在这两种情况下都丢弃了$newsDocument
变量,看起来彼此相似。
我可能发现了一个问题。我的News
实体使用SoftDeletable
扩展作为Doctrine,但joiner实体没有。我猜这个扩展试图为关系设置一个deleted_at
标志,而不是永久删除它。这就是为什么如果我直接从存储库中获取joiner实体,那么它就可以正常工作。