Удаление нескольких файлов - PullRequest
0 голосов
/ 24 января 2019

Я застрял здесь, любая помощь приветствуется:

Итак, у меня есть таблица с темами, а затем подтемы.Каждая тема имеет много подтем, и я хочу иметь возможность уничтожить тему, и все подтемы идут вместе.

Я сделал это с этим контроллером:

public function destroy()
{
     $comtheme = Theme::findOrFail(request('idDelTCom'));
     $comtheme->delete();
     $comfiles = Subtheme::where('comtheme_id', '=', request('idDelTCom'));
     $comfiles->delete();

     return back();
}

за работой.Моя проблема заключается в следующем:

Каждая подтема имеет связанные файлы.Когда я удаляю одну подтему, я могу удалить файл, используя:

unlink(storage_path('app/public/com/checklists/'.$file));

Я пытался сделать то же самое, и он не будет работать.Я полагаю, что проблема связана с моим запросом, но я не могу обойти то, что я должен сделать здесь ...

Если я не смогу решить эту проблему, я просто запрещу удаление Темы довсе подтемы удалены, но было бы лучше просто удалить все.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я понял это.Я знаю, что, возможно, не правильно задал вопрос, так что спасибо за помощь в любом случае!

Проблема заключалась в том, что я пытался удалить несколько файлов, и мой код отмены ссылки не ожидал коллекцию или сборщикаочевидно.У меня это работает так:

public function destroy()
    {

        $comfiles= Comfile::where('comtheme_id', '=', request('idDelTCom'))->get();

        foreach($comfiles as $comfile){
            $file = $comfile->file_name;

            unlink(storage_path('app/public/com/checklists/'.$file));
        }

        $comfileDel = Comfile::where('comtheme_id', '=', request('idDelTCom'));

        $comfileDel->delete();

        $comtheme= Comtheme::findOrFail(request('idDelTCom'));

        $comtheme->delete();

        return back();

    }

Итак, я получаю коллекцию данных, которые я хочу удалить, запускаю цикл foreach для удаления каждого файла в нем.Затем я запускаю конструктор тех же данных, чтобы удалить их, и мы начинаем.

0 голосов
/ 24 января 2019

Используйте на наблюдателя на вашей модели Theme. Есть много способов реализовать это, но я предпочитаю объявлять это в самом классе модели, поэтому в классе для модели Theme укажите это:

protected static function boot()
{
    parent::boot();
    static::observe(ThemeObserver::class);
}

Конечно, будет оператор use, указывающий на ваш класс ThemeObserver вверху, поместите этот класс в любое место в проекте, с вашей моделью или выделенным каталогом наблюдателей.

В классе ThemeObserver вам нужно событие для deleting, например:

public function deleting(Theme $theme)
{
    // delete subthemes here
}

Вы можете настроить аналогичного наблюдателя для своих подтем, где вы удаляете связанные с ним файлы или просто делаете это здесь.

https://laravel.com/docs/5.7/eloquent#observers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...