Моя News
сущность связана с Document
сущностью через объединитель NewsDocument
сущность с некоторыми дополнительными полями: Новости -> NewsDocument <- Документ </p>
/**
* @ORM\Entity
* @ORM\Table(name="news_document")
* @UniqueEntity(
* fields={"news", "document"}
* )
*/
class NewsDocument
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Document", inversedBy="news")
* @ORM\JoinColumn(nullable=false)
*/
private $document;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\News", inversedBy="documents")
* @ORM\JoinColumn(nullable=false)
*/
private $news;
/**
* @ORM\Column(type="integer")
*/
private $position;
Моя News
сущность
/**
* @ORM\OneToMany(targetEntity="App\Entity\NewsDocument", mappedBy="news", cascade={"persist"})
* @ORM\OrderBy({"position" = "ASC"})
*/
private $documents;
public function getNewsDocuments()
{
return $this->documents;
}
Когда я пытался удалить каждую NewsEntity
итерацию по полю documents
моего News
объекта, NewsEntity
не был удален из БД.
$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();
Я не понимаю, почему первый код не может удалить NewsDocument
из БД.
Я сбросил $newsDocument
переменную в обоих случаях и выглядели похожими друг на друга.