gurgentil/laravel-eloquent-sequencer

一个允许您在Eloquent模型上创建和管理序列的包

1.1.0 2023-04-23 22:30 UTC

This package is auto-updated.

Last update: 2024-09-24 02:11:39 UTC


README

Latest Version GitHub Workflow Status Quality Score MIT Licensed

此包允许您为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配置决定何时触发序列化,并接受以下值之一:alwayson_createon_updatenever

模型配置

$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包模板生成。