artistan / eloquent-sortable
eloquent 模型的排序行为
Requires
- php: >=7.0
- illuminate/database: ~5.3.0|~5.4.0|~5.5.0|~5.6.0
- illuminate/support: ~5.3.0|~5.4.0|~5.5.0|~5.6.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 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 这里。
Postcardware
您可以使用此包(它是 MIT 许可的),但如果它进入您的生产环境,则要求您从您的家乡寄给我们一张明信片,说明您正在使用我们的哪些包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
最好的明信片将发布在我们的网站上开源页面。
安装
此包可以通过 Composer 安装。
$ composer require Artistan/eloquent-sortable
用法
要将排序行为添加到您的模型,您必须
- 指定模型将遵守
Artistan\EloquentSortable\Sortable
- 使用特质
Artistan\EloquentSortable\SortableTrait
- 指定哪个列将用作排序列
示例
use Artistan\EloquentSortable\Sortable; use Artistan\EloquentSortable\SortableTrait; class MyModel extends Eloquent implements Sortable { use SortableTrait; public $sortable = [ 'order_column_name' => 'order_column', 'sort_when_creating' => true, /* 'order_unique' => ['another_key'], // optional additional keys for allowing multiple sorts in a table. */ ]; ... }
如果您未设置值 $sortable['order_column_name']
,则包将假设您的排序列名称为 order_column
。
如果您未设置值 $sortable['sort_when_creating']
,则包将自动为新模型分配最高的排序号;
如果您未设置值 $sortable['order_unique']
,则包将假设您的模型将排序所有值。如果已设置,则排序将使用提供的键进行匹配。
假设 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 联系我们,而不是使用问题跟踪器。
鸣谢
替代方案
关于 Spatie
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 这里。
许可
MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。