In laravel 8 app I with spatie/laravel-medialibrary 9 I want to delete file from storage when I delete parent model with boot method, like
<?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);
}
}
});
}
But file is not deleted and checking logs I see message
-1 INSIDEstatic::deleting(:
, but not messages inside of
foreach ($photo->getMedia('photo') as $mediaImage) {
loop. Why so ? I expected
static::deleting(function
is triggered BEFORE rmodel is delete in contoller method :
try {
DB::beginTransaction();
$photo->delete();
DB::commit();
How to make delete these files ?
Thanks!