0

在 laravel 8 应用程序中,我使用 spatie/laravel-medialibrary 9 我想在使用引导方法删除父模型时从存储中删除文件,例如

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;

class Photo extends Model  implements HasMedia
{
    use HasFactory;
    use InteractsWithMedia;

    protected $table = 'photos';


    protected static function boot()
    {
        parent::boot();
        static::deleting(function ($photo) {
            \Log::info( ' -1 INSIDEstatic::deleting(::' );
            foreach ($photo->getMedia('photo') as $mediaImage) {
                \Log::info(  varDump($mediaImage->getPath(), ' -1 $mediaImage->getPath()::') );
                if (File::exists($mediaImage->getPath())) {
                    \Log::info(  varDump($mediaImage->getPath(), ' -1 $mediaImage->getPath()::') );
                    Storage::delete($mediaImage);
                }
            }
        });
    }

但是文件没有被删除并且检查日志我看到了消息

 -1 INSIDEstatic::deleting(:

,但不是里面的消息

foreach ($photo->getMedia('photo') as $mediaImage) {

环形。为什么这样 ?我期望

static::deleting(function 

在控制器方法中删除 rmodel 之前触发:

try {
    DB::beginTransaction();
    $photo->delete();

    DB::commit();

如何删除这些文件?

谢谢!

4

0 回答 0