M
M
Maxim Volkov2020-10-22 11:51:44
Laravel
Maxim Volkov, 2020-10-22 11:51:44

How to delete multiple files while deleting post and information in database at the same time?

I am working on the admin panel - CRUD for the site. Each post has a gallery of images, information about which is stored in a separate database table. Image files are downloaded and stored in /storage/app/public.

There was some issue when deleting image files from the storage folder when deleting a post. There are no problems with deleting information about these files in the database, but I have some misunderstanding how to delete a group of files associated with a post when deleting a post.

Please help. Can you tell me the most rational way?

//Pechnik -  модель/таблица содержит данные поста
//Images - модель/таблица содержит информацию о  изображениях галереи 

// - метод ресурсного контролера для удаления поста
 public function destroy($id)
    {
        Images::where('pechnik_id', $id)->delete();
        Pechnik::find($id)->delete();
        return redirect()->route('admin.index')->with('success', 'Информаця успешно удалена');
    }

Answer the question

In order to leave comments, you need to log in

3 answer(s)
M
Maxim Volkov, 2020-10-26
@voland700

I will describe the solution to this problem. I solved the task of simultaneously deleting gallery files when deleting a post as follows:

//Pechnik -  модель/таблица содержит данные поста
//Images - модель/таблица содержит информацию о  изображениях галереи 
 
// - метод ресурсного контролера для удаления поста
    public function destroy($id)
    {
        $images = Images::where('pechnik_id', $id); //получаю колекцию файлов галереи превязанных к ID поста p из таблицы Images
        $pathImages = $images->get('img'); //получаю данные наименование и путь файлов галереи превязанных к ID поста
        if (!$pathImages->isEmpty()){ 
            foreach ($pathImages as $img){ 
                $path = $img->img; 
                Storage::disk('public')->delete(str_replace('storage', '', $path)); //в цикле удаляю фалы галереи превязанных к ID поста
            }
        }
        $images->delete(); // удаляю записи в таблице Images:: о файлах галереи
        $pechnik= Pechnik::find($id);   // получаю данные поста по ID из таблицы Pechnik::
        Pechnik::find($id)->delete();  // удаляю запись в таблице Pechnik:: - данные поста
        return redirect()->route('admin.index')->with('success', 'Информаця успешно удалена');
    }

P
pLavrenov, 2020-10-27
@pLavrenov

On the Images delete event, you need to implement the removal of an image from disk. with this approach, it doesn’t matter if we delete pictures of a certain model or random ones.
https://laravel.com/docs/8.x/eloquent#observers

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question