johankladder / eloquent-sortable
为 eloquent 模型添加可排序行为
Requires
- php: >=7.0
- illuminate/database: ~5.3.0|~5.4.0|~5.5.0
- illuminate/support: ~5.3.0|~5.4.0|~5.5.0
Requires (Dev)
- orchestra/database: ~3.3.0|~3.4.0|3.5.0
- orchestra/testbench: ~3.3.0|~3.4.0|3.5.0
- phpunit/phpunit: ^5.7|^6.2
README
此包提供了一个特质,可以为 Eloquent 模型添加可排序行为。
新记录的排序列的值由该模型所有记录的排序列的最大值加 1 决定。
此包还提供了一个查询范围,用于按正确顺序检索所有记录。
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
安装
此包可以通过 Composer 安装。
$ composer require spatie/eloquent-sortable
用法
要将可排序行为添加到您的模型中,您必须
- 指定模型将遵循
Spatie\EloquentSortable\Sortable - 使用特质
Spatie\EloquentSortable\SortableTrait - 指定哪个列将用作排序列
示例
use Spatie\EloquentSortable\Sortable; use Spatie\EloquentSortable\SortableTrait; class MyModel extends Eloquent implements Sortable { use SortableTrait; public $sortable = [ 'order_column_name' => 'order_column', 'sort_when_creating' => true, 'sort_by_group_column' => 'group_by_column' ]; ... }
如果您没有设置 $sortable['order_column_name'] 的值,则包将假设您的排序列名称为 order_column。
如果您没有设置 $sortable['sort_when_creating'] 的值,则包将自动为新模型分配最高的排序编号;
如果您没有设置 $sortable['sort_by_group_column'] 的值,则包将自动按表顺序排序。如果您指定此值,它将只对同一表中设置为列的行进行排序;
假设 MyModel 的数据库表为空
$myModel = new MyModel(); $myModel->save(); // order_column for this record will be set to 1 $myModel = new MyModel(); $myModel->save(); // order_column for this record will be set to 2 $myModel = new MyModel(); $myModel->save(); // order_column for this record will be set to 3 //the trait also provides the ordered query scope $orderedRecords = MyModel::ordered()->get();
您可以使用 setNewOrder 方法为所有记录设置新的顺序
/** * the record for model id 3 will have record_column value 1 * the record for model id 1 will have record_column value 2 * the record for model id 2 will have record_column value 3 */ MyModel::setNewOrder([3,1,2]);
可选地,您可以将起始顺序号作为第二个参数传递。
/** * the record for model id 3 will have record_column value 11 * the record for model id 1 will have record_column value 12 * the record for model id 2 will have record_column value 13 */ MyModel::setNewOrder([3,1,2], 10);
您还可以使用这些方法向上或向下移动模型
$myModel->moveOrderDown(); $myModel->moveOrderUp();
您还可以将模型移动到第一个或最后一个位置
$myModel->moveToStart(); $myModel->moveToEnd();
您还可以交换两个模型的顺序
MyModel::swapOrder($myModel, $anotherModel);
测试
此包包含一些与 Orchestra 集成的测试,可以通过 phpunit 运行。
$ vendor/bin/phpunit
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何安全问题,请通过电子邮件 freek@spatie.be 而不是使用问题跟踪器。
Postcardware
您可以自由使用此包,但如果它进入您的生产环境,我们非常感谢您从您的家乡给我们寄一张明信片,说明您正在使用我们的哪些包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
我们在公司的网站上发布所有收到的明信片 在这里。
鸣谢
替代方案
支持我们
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
您的业务是否依赖于我们的贡献?请通过Patreon联系我们并支持我们。所有的承诺都将专门用于分配人力在维护和新奇功能上。
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件。