plank / laravel -mediable - удаление по сравнению с отсоединением носителя при удалении Mediable объектов - PullRequest
1 голос
/ 25 апреля 2020

При удалении модели с признаком Mediable все ссылки на связанные носители автоматически удаляются из таблицы Mediables благодаря прослушивателю событий. Хорошо. Но это не удаляет связанные записи мультимедиа или файлы на диске, которые были с этими носителями. Я могу понять, что это отчасти по замыслу: эти записи СМИ также могут быть связаны с другими объектами.

Но в этом контексте элемент мультимедиа будет прикрепляться только к одному элементу за раз, и если элемент исчезает, элемент мультимедиа и связанные с ним файлы должны go с ним.

В настоящее время я решаю эту проблему, регистрируя прослушиватель delete () на модели и перебирая все подключенные носители, отсоединяя его, а затем удаляя его, один за другим.

Это рекомендуемый подход или я пропустил некоторые детали реализации в laravel -медиа, которые бы автоматически убирали эту уборку, когда количество ссылок на данный носитель исчерпано?

    public static function boot()
    {
        parent::boot();

        static::deleting(function (self $model) {
            $mediabytag = $model->getAllMediaByTag();
            if ($mediabytag) {
                foreach ($mediabytag as $tag => $medias) {
                    foreach ($medias as $m) {
                        $model->detachMedia($m);
                        $m->delete();
                    }
                }
          }
        });
    }

Обновление: Насколько я понимаю, Mediable устанавливает отношения как полиморф c многие ко многим:

    /**
     * Relationship for all attached media.
     * @return MorphToMany
     */
    public function media(): MorphToMany
    {
        return $this
            ->morphToMany(
                config('mediable.model'),
                'mediable',
                config('mediable.mediables_table', 'mediables')
            )
            ->withPivot('tag', 'order')
            ->orderBy('order');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...