Associate files with Eloquent models and add Sortable behaviour

9.4.2 2021-01-15 07:55 UTC

This package is auto-updated.

Last update: 2024-05-16 00:28:07 UTC



Total Downloads Latest Stable Version License

Changes to the original package

This forked package eliminates the IsSorted Trait from Spatie\MediaLibrary\MediaCollections\Models\Media, so the sorting/ordering part could be made by spatie/eloquent-sortable. I have also added the spatie/eloquent-sortable as a dependency.


This package uses "spatie/eloquent-sortable": "^3.11" together with "spatie/laravel-medialibrary": "^9.0.0" and it can be installed through Composer:

composer require lartisan/laravel-sortable-medialibrary

In Laravel 5.5 and above the service provider will automatically get registered. In older versions of the framework just add the service provider in config/app.php file:

'providers' => [

Optionally you can publish the config files with:

php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\EloquentSortable\EloquentSortableServiceProvider" --tag="config"


To add the intended Eloquent sortable behaviour to your custom Media model you must:

  1. Implement the Spatie\EloquentSortable\Sortable interface.
  2. Use the trait Spatie\EloquentSortable\SortableTrait.
  3. Optionally specify which column will be used as the order column. The default is order_column.
  4. Optionally, if your model/table has a grouping field, you can create a buildSortQuery method at your model.


use Spatie\EloquentSortable\Sortable;
use Spatie\EloquentSortable\SortableTrait;
use Spatie\MediaLibrary\MediaCollections\Models\Media as BaseMedia;

class MyCustomMedia extends BaseMedia implements Sortable
    use SortableTrait;
     * Define the column used for sorting
     * @var array
    public $sortable = [
        'order_column_name' => 'order_column',
        'sort_when_creating' => true,

     * @return Builder
    public function buildSortQuery(): Builder
        return static::query()
            ->where('collection_name', $this->collection_name);

To add the default sort of the original package behaviour to your custom Media model

You could still use the default IsSorted behaviour of the original package by adding the Spatie\MediaLibrary\MediaCollections\Models\Concerns\IsSorted to your model.


use Spatie\MediaLibrary\MediaCollections\Models\Concerns\IsSorted;
use Spatie\MediaLibrary\MediaCollections\Models\Media as BaseMedia;

class MyCustomMedia extends BaseMedia
    use IsSorted;


The original spatie/laravel-medialibrary package.

The spatie/eloquent-sortable package.


The MIT License (MIT). Please see License File for more information.