Невозможно удалить объекты, повторяющие коллекцию, но я могу удалить их получение напрямую из репозитория - PullRequest
0 голосов
/ 02 августа 2020

Моя 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 переменную в обоих случаях и выглядели похожими друг на друга.

1 Ответ

0 голосов
/ 02 августа 2020

Наверное, я нашел проблему. Моя сущность News использует расширение SoftDeletable для Doctrine, а объединенная сущность - нет. Я предполагаю, что это расширение пытается установить флаг deleted_at для отношения, вместо того, чтобы удалить его навсегда. Вот почему, если я получаю объединенную сущность непосредственно из репозитория, работает правильно.

...