Downloads
Stars
Version
This package allows you to sort order of your Laravel model records with easy methods:
$model->moveUp();
$model->moveDown();
$model->move('up');
$model->move('down');
To install the most recent version, run the following command.
composer require hippieua/laravel-sortable
Your model should contain sortable field. You can add new or use existing one (don't use default id field)
Schema::table('comments', function (Blueprint $table) {
$table->unsignedInteger('order')->default(1);
});
Update you model, use Sortable trait and fill $sortable_field
property according to field name you've added.
use Hippie\Sortable\Sortable;
class Comment extends Model
{
use Sortable;
protected string $sortable_field = 'order';
protected $fillable = [
'order',
];
}
If your model have BelongsTo relationship, and you want to move records up and down within your relation items fill $sortable_relation
property.
use Hippie\Sortable\Sortable;
class Comment extends Model
{
use Sortable;
protected string $sortable_field = 'order';
protected string $sortable_relation = 'post';
protected $fillable = [
'order',
];
public function post(): BelongsTo
{
return $this->belongsTo(Post::class);
}
class Post extends Model
{
public function comments(): BelongsTo
{
return $this->hasMany(Comment::class)->orderBy('order');
}
}
In case you don't want to calculate your sortable field value on creating new item manually add static::created
to your sortable model
protected static function booted()
{
static::created(function ($model) {
$model->updateSortOrderOnCreate();
});
}
$comment = $post->comments()->create([
'text' => $request->text,
])
$comment->order
value will be set to $post->comments->count() + 1
$post->comments()->first()->moveDown()
will set order
field value for the first comment to 2 and set order
field value for second item to 1;
$comment->moveUp();
$comment->moveDown();
$comment->move('up');
$comment->move('down');
Tested on Laravel 8 and 9 versions
The MIT License (MIT). Please see License File for more information.