A package that allows you to create and manage sequences on Eloquent models
gurgentil/laravel-eloquent-sequencer is a Laravel package for a package that allows you to create and manage sequences on eloquent models.
It currently has 152 GitHub stars and 47.995 downloads on Packagist (latest version 1.2.0).
Install it with composer require gurgentil/laravel-eloquent-sequencer.
Discover more Laravel packages by gurgentil
or browse all Laravel packages to compare alternatives.
Last updated
This package allows you to create and manage sequences for your Eloquent models.
Install the package via composer:
composer require gurgentil/laravel-eloquent-sequencer
To publish the configuration file run:
php artisan vendor:publish --provider="Gurgentil\LaravelEloquentSequencer\LaravelEloquentSequencerServiceProvider"
You can change the default colum name, the initial value and the sequencing strategy in config/eloquentsequencer.php:
return [
'column_name' => 'position',
'initial_value' => 1,
'strategy' => 'always',
];
The strategy configuration determines when sequencing should be triggered and accepts one of the following values: always, on_create, on_update or never.
The $sequenceable attribute specifies the sequence column name for the model:
protected static $sequenceable = 'order';
The relationship key(s) that will group the sequence items together:
protected static $sequenceableKeys = [
'task_list_id',
];
In the example above, a task list has many tasks.
For polymorphic relationships specify both relationship keys:
protected static $sequenceableKeys = [
'commentable_id',
'commentable_type',
];
In the example below, a task list may have many tasks.
use Gurgentil\LaravelEloquentSequencer\Traits\Sequenceable;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
use Sequenceable;
protected $fillable = [
'position',
];
protected static $sequenceableKeys = [
'task_list_id',
];
public function taskList()
{
return $this->belongsTo(TaskList::class);
}
}
Task::create([
'position' => 1,
'task_list_id' => 1,
]);
If no value is provided for the sequence attribute, the object will be placed at the end of the sequence.
Task::create(['task_list_id' => 1]);
The other items in the sequence will be rearranged to keep the sequence consistent.
$task->update(['position' => 4]);
$task->delete();
$value = $task->getSequenceValue();
$columnName = Task::getSequenceColumnName();
$task->withoutSequencing()->update(['position' => 3]);
$task->withoutSequencing()->delete();
$tasks = Task::sequenced()->get();
Assign sequence values to all records that have their values set to null.
php artisan sequence:populate \\App\\Task
Flush all sequence values for a model.
php artisan sequence:flush \\App\\Task
composer test
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.
This package was generated using the Laravel Package Boilerplate.