This package allows you to create and manage sequences for your Eloquent models.
Install the package via composer:
composer require gurgentil/laravel-eloquent-sequencerTo 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\\TaskFlush all sequence values for a model.
php artisan sequence:flush \\App\\Taskcomposer testPlease 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.