thadbryson / eloquent-sequence
一个用于简化Eloquent模型弹性配置的序列创建和管理Laravel包。
Requires
- php: >=7.1.3
- illuminate/support: 5.*|^6.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: 3.*|4.*
- phpunit/phpunit: 6.*|7.*|8.*
This package is auto-updated.
Last update: 2024-08-29 05:30:41 UTC
README
使用弹性配置简化Eloquent模型的序列创建和管理。
安装
此包可以通过Composer安装
composer require highsolutions/eloquent-sequence
或者通过将以下行添加到您的Laravel webapp的composer.json文件的require部分
"require": { "HighSolutions/eloquent-sequence": "3.*" }
运行composer update来安装此包。
版本兼容性
更新Eloquent模型
use HighSolutions\EloquentSequence\Sequence; class Section extends Model { use Sequence; public function sequence() { return [ 'group' => 'article_id', 'fieldName' => 'seq', ]; } }
注意:不要在该类的任何现有方法中使用字段名称,包括sequence,因为这不会起作用。
配置
您可以指定四个参数
group- 要计算的序列参数内对象列表的字段名称或字段名称(然后作为数组输入)- 默认值:""
fieldName- 在模型中存储序列属性的字段名称- 默认值:"seq"
exceptions- 如果您想在up/down方法期间捕获异常,则设置此为true- 默认值:false
orderFrom1- 如果您的列表从1开始而不是0,则设置此为true(用于移动方法)- 默认值:false
notUpdateOnDelete- 如果您不想在删除对象时更新序列属性,则设置此为true- 默认值:false
disableTimestamps- 如果您不想在使用序列方法时更新"updated_at"属性,则设置为true- 默认值:false
用法
设置序列属性
序列属性将在模型创建期间设置。
$section = Section::create([ 'article_id' => 1, 'title' => 'Lorem ipsum', ]);
在此方法之后,$section的字段值将看起来像
{
'id' => 1,
'article_id' => 1,
'title' => 'Lorem ipsum',
'seq' => 1
}
当我们创建另一个Section对象时
Section::create([ 'article_id' => 1, 'title' => 'Lorem ipsum Second', ]); Section::create([ 'article_id' => 2, 'title' => 'Lorem ipsum Third but new', ]);
我们得到包含字段的对象列表
[{
'id' => 1,
'article_id' => 1,
'title' => 'Lorem ipsum',
'seq' => 1
}, {
'id' => 2,
'article_id' => 1,
'title' => 'Lorem ipsum Second',
'seq' => 2
}, {
'id' => 3,
'article_id' => 2,
'title' => 'Lorem ipsum Third but new',
'seq' => 1
}]
删除对象并更新序列
但是当我们删除对象时
Section::find(1)->delete();
序列值将相应更新
[{
'id' => 2,
'article_id' => 1,
'title' => 'Lorem ipsum Second',
'seq' => 1
}, {
'id' => 3,
'article_id' => 2,
'title' => 'Lorem ipsum Third but new',
'seq' => 1
}]
获取具有正确序列的对象
要获取对象,只需添加->orderBy('seq', 'asc')方法
Section::where('article_id', 1)->orderBy('seq', 'asc')->get();
或使用局部作用域sequenced
Section::where('article_id', 1)->sequenced()->get(); Section::where('article_id', 1)->sequenced('desc')->get();
将对象向上移动一个位置
要向上移动一个位置(与较早的对象交换位置),您只需要
Section::find(2)->up();
这将设置序列属性为低一个位置,低一个位置的对象的序列属性将更改为高一个位置。
来自配置的分组将当然被使用。
将对象向下移动一个位置
您也可以这样做,使您的对象成为下一个
Section::find(2)->down();
这将设置Section ID=2的序列属性与下一个Section对象的序列属性相同(基于序列属性),并相应地交换它们的值。
将对象移动到第一个位置
要将对象移动到第一个位置,您只需要
Section::find(2)->moveToFirst();
这将设置序列属性为序列中的第一个位置,并将相应地重新排序原始位置和第一个位置之间的对象。
来自配置的分组将当然被使用。
将对象移动到最后一个位置
要将对象移动到最后一个位置,您只需要
Section::find(2)->moveToLast();
这将设置序列属性为序列中的最后一个位置,并将相应地重新排序原始位置和最后一个位置之间的对象。
来自配置的分组将当然被使用。
将对象移动到任何位置
您还可以将对象移动到另一个位置。这在实现拖放功能时非常有用。
Section::find(2)->move(5);
这将设置Section ID=2的序列属性为5,其余对象的序列属性将更新以匹配正确的顺序。
刷新模型中的位置
有时您可能需要重新计算给定模型的所有位置(例如,由于手动操作数据集)。您可以通过以下方式轻松完成此操作
Section::refreshSequence();
这个静态方法将为该模型的每条记录重新计算序列属性。同时也会使用分组缩小以及每条记录当前的序列属性。
检查对象是否是集合中的第一个
您能够检查对象是否是其组中的第一个。
Section::find(2)->isFirst();
这将返回一个布尔值,表示该对象是否是集合中的第一个元素。
检查对象不是集合中的第一个
您能够检查对象是否不是其组中的第一个。
Section::find(2)->isNotFirst();
这将返回一个布尔值,表示该对象不是集合中的第一个元素。
检查对象是否是集合中的最后一个
您能够检查对象是否是其组中的最后一个。
Section::find(2)->isLast();
这将返回一个布尔值,表示该对象是否是集合中的最后一个元素。
检查对象不是集合中的最后一个
您能够检查对象是否不是其组中的最后一个。
Section::find(2)->isNotLast();
这将返回一个布尔值,表示该对象不是集合中的最后一个元素。
测试
使用以下命令运行测试
vendor/bin/phpunit
变更日志
3.6.0
- 添加
isFirst、isNotFirst、isLast、isNotLast方法
3.5.0
- 修复 3.3.0 版本 - 改进了在重新排序时防止时间戳的问题
3.4.0
- 支持 Laravel 6.0 版本
3.3.0
- 在重新排序期间选择防止更新
updated_at时间戳的选项
3.2.0
- 修复
moveToLast方法
3.1.0
- 可能更改现有对象的组 [#16]
3.0.2
- 轻微的性能改进
3.0.0
- 支持所有 Laravel 5.x 版本
2.6.2
- 添加
NotUpdateOnDelete配置参数
2.6.0
- Laravel 5.6 支持
2.5.0
- Laravel 5.5 支持
2.4.0
- Laravel 5.4 支持
2.3.0
- Laravel 5.3 支持
2.2.0
- Laravel 5.2 支持
2.1.0
- Laravel 5.1 支持
2.0.3
- 添加 StyleCI 和 CircleCI 支持
2.0.2
- 添加
moveToFirst和moveToLast方法
2.0.1
- 当位置参数小于
move方法第一个可能的序列值时,添加InvalidArgumentException
2.0.0
- 完整单元测试
- 当位置参数大于
move方法最后一个可能的序列值时,添加InvalidArgumentException - 当位置参数无效时(禁用了异常参数),方法
move将序列属性设置为第一个可能的数字(计数 + 1),而不是从参数中设置值 / 破坏性更改
1.3.1
- 修复在对象 seq > 2 时使用的
down方法(在 1.3.0 版本中引入的错误)
1.3.0
- 修复在对象 seq > 2 时使用的
up方法
1.2.0
- 按需重新计算序列属性
1.1.1
- 配置列表的起始索引(用于移动方法)
1.1.0
- 将对象移动到任何位置
1.0.0
- 添加上移和下移方法
0.9.0
- 创建软件包
- 创建用于自动处理序列属性的特质
鸣谢
此软件包由 HighSolutions 开发,这是一家来自波兰的软件公司,热爱 Laravel。
