gurgentil / laravel-eloquent-sequencer
一个允许您在Eloquent模型上创建和管理序列的包
1.1.0
2023-04-23 22:30 UTC
Requires
- php: ^7.2.5|^8.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^3.8|^4.0|^5.0|^6.0|^7.0|^8.0
README
此包允许您为Eloquent模型创建和管理序列。
安装
使用composer安装此包
composer require gurgentil/laravel-eloquent-sequencer
配置
要发布配置文件,请运行
php artisan vendor:publish --provider="Gurgentil\LaravelEloquentSequencer\LaravelEloquentSequencerServiceProvider"
配置参数
您可以在config/eloquentsequencer.php
中更改默认列名、初始值和序列化策略
return [ 'column_name' => 'position', 'initial_value' => 1, 'strategy' => 'always', ];
strategy
配置决定何时触发序列化,并接受以下值之一:always
、on_create
、on_update
或never
。
模型配置
$sequenceable
属性指定模型的序列列名
protected static $sequenceable = 'order';
将序列项组合在一起的关联键(键)
protected static $sequenceableKeys = [ 'task_list_id', ];
在上面的示例中,任务列表有许多任务。
对于多态关系
,指定两个关联键
protected static $sequenceableKeys = [ 'commentable_id', 'commentable_type', ];
用法
在下面的示例中,任务列表可能有多个任务。
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, ]);
如果未提供序列属性值,则对象将被放置在序列的末尾。
Task::create(['task_list_id' => 1]);
更新和删除对象
序列中的其他项将被重新排列,以保持序列的一致性。
$task->update(['position' => 4]);
$task->delete();
获取对象的序列值
$value = $task->getSequenceValue();
获取序列列名
$columnName = Task::getSequenceColumnName();
禁用自动序列化
$task->withoutSequencing()->update(['position' => 3]);
$task->withoutSequencing()->delete();
将查询范围限定为按序列值排序结果
$tasks = Task::sequenced()->get();
Artisan命令
将序列值分配给所有其值设置为null
的记录。
php artisan sequence:populate \\App\\Task
刷新模型的全部序列值。
php artisan sequence:flush \\App\\Task
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现任何安全相关的问题,请通过电子邮件gustavorgentil@outlook.com而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。
Laravel包模板
此包使用Laravel包模板生成。