Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save saeedvir/968ec62b1cfc33a1cbab8e07178a25c1 to your computer and use it in GitHub Desktop.
Save saeedvir/968ec62b1cfc33a1cbab8e07178a25c1 to your computer and use it in GitHub Desktop.
spatie/laravel-medialibrary , save media without a model relationship
#1- Create `Media` Model In App\Models
<?php
namespace App\Models;
use Spatie\MediaLibrary\HasMedia;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\InteractsWithMedia;
class Media extends Model implements HasMedia
{
use InteractsWithMedia;
}
#2- Upload Media (without saving media !) in your controller
<?php
$uploadfile = request()->file('upload');
$media = new Media;
$media = $media->addMedia($uploadfile)->toMediaCollection('filemanager');
#or (hash filename)
#$media = $media->addMedia($uploadfile)->usingFileName($uploadfile->hashName())->toMediaCollection('filemanager');
#Save In Table
$media->model_type = get_class(new Media);
$media->save();
#upload in storage
$uploadfile->storeAs($media->id, $media->file_name, 'public');
#3- Get medias in your controller:
<?php
$medias = Media::where('collection_name', 'filemanager')->get();
#4- Get media url (in blade or ...)
foreach($medias as $media){
asset('/storage/'.$media->id.'/'.$media->file_name);
}
#5-delete media in your controller
$media = Media::where('collection_name', 'filemanager')->findOrFail(Your Media ID Here);
Storage::disk('public')->delete($media->id.DIRECTORY_SEPARATOR.$media->file_name);
Storage::disk('public')->deleteDirectory($media->id);
$media->delete();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment