Add the package to your Laravel app using composer.
$ composer require plank/laravel-mediable
Register the package's service provider in config/app.php. In Laravel versions 5.5 and beyond, this step can be skipped if package auto-discovery is enabled.
'providers' => [ //... Plank\Mediable\MediableServiceProvider::class, //... ];
The package comes with a Facade for the image uploader, which you can optionally register as well. In Laravel versions 5.5 and beyond, this step can be skipped if package auto-discovery is enabled.
'aliases' => [ //... 'MediaUploader' => Plank\Mediable\Facades\MediaUploader::class, //... ]
Publish the config file (config/mediable.php
) and migration file (database/migrations/####_##_##_######_create_mediable_tables.php
) of the package using artisan.
$ php artisan vendor:publish --provider="Plank\Mediable\MediableServiceProvider"
Run the migrations to add the required tables to your database.
$ php artisan migrate
Add the Mediable trait and MediableInterface interface to your eloquent models
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Plank\Mediable\Mediable; use Plank\Mediable\MediableInterface; class Post extends Model implements MediableInterface { use Mediable; // ... }
Upload files and convert them into Media records.
<?php $media = MediaUploader::fromSource($request->file('thumbnail')) ->toDestination('s3', 'posts/thumbnails') ->upload();
Attach the records to your models.
<?php $post = Post::find($postId); $post->attachMedia($media, 'thumbnail');
Load and display your files
<?php $post = Post::withMedia()->find($postId); echo $post->getMedia('thumbnail')->first()->getUrl();