可以't删除在集合上迭代的实体,但我可以删除直接从存储库中获取它们



我的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实体,那么它就可以正常工作。

相关内容

  • 没有找到相关文章

最新更新