silverd / laravel-sortable
eloquent模型的可排序行为
dev-master
2024-09-09 16:13 UTC
Requires
- php: ^7.4||^8.0
- illuminate/database: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
This package is not auto-updated.
Last update: 2024-09-28 19:42:13 UTC
README
@感谢 spatie/eloquent-sortable
安装
此包可以通过Composer安装。
composer require silverd/laravel-sortable:dev-master
可选地,您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="Silverd\LaravelSortable\ServiceProvider"
使用方法
要将可排序行为添加到模型,您必须
- 实现
Silverd\LaravelSortable\Sortable
接口。 - 使用 traits
Silverd\LaravelSortable\SortableTrait
。 - 可选地指定用作排序列的列。默认为
weight
。
示例
use Silverd\LaravelSortable\Sortable; use Silverd\LaravelSortable\SortableTrait; class MyModel extends Eloquent implements Sortable { use SortableTrait; public $sortable = [ 'sort_column_name' => 'weight', 'sort_when_creating' => 'end', ]; ... }
如果您没有设置值 $sortable['sort_column_name']
,则包将假设您的排序列名称为 weight
。
如果您没有设置值 $sortable['sort_when_creating']
,则包将自动将最低顺序号分配给新模型;
假设 MyModel
的数据库表为空
$myModel = new MyModel(); $myModel->save(); // weight for this record will be set to 1 $myModel = new MyModel(); $myModel->save(); // weight for this record will be set to 2 $myModel = new MyModel(); $myModel->save(); // weight 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 weight value 1 * the record for model id 1 will have weight value 2 * the record for model id 2 will have weight value 3 */ MyModel::setNewOrder([3,1,2]);
可选地,您可以将起始顺序号作为第二个参数传递。
/** * the record for model id 3 will have weight value 11 * the record for model id 1 will have weight value 12 * the record for model id 2 will have weight value 13 */ MyModel::setNewOrder([3,1,2], 10);
要使用除主键之外的列进行排序,请使用 setNewOrderByCustomColumn
-方法。
/** * the record for model uuid '7a051131-d387-4276-bfda-e7c376099715' will have weight value 1 * the record for model uuid '40324562-c7ca-4c69-8018-aff81bff8c95' will have weight value 2 * the record for model uuid '5dc4d0f4-0c88-43a4-b293-7c7902a3cfd1' will have weight value 3 */ MyModel::setNewOrderByCustomColumn('uuid', [ '7a051131-d387-4276-bfda-e7c376099715', '40324562-c7ca-4c69-8018-aff81bff8c95', '5dc4d0f4-0c88-43a4-b293-7c7902a3cfd1' ]);
与 setNewOrder
一样,setNewOrderByCustomColumn
也将接受一个可选的起始顺序参数。
/** * the record for model uuid '7a051131-d387-4276-bfda-e7c376099715' will have weight value 10 * the record for model uuid '40324562-c7ca-4c69-8018-aff81bff8c95' will have weight value 11 * the record for model uuid '5dc4d0f4-0c88-43a4-b293-7c7902a3cfd1' will have weight value 12 */ MyModel::setNewOrderByCustomColumn('uuid', [ '7a051131-d387-4276-bfda-e7c376099715', '40324562-c7ca-4c69-8018-aff81bff8c95', '5dc4d0f4-0c88-43a4-b293-7c7902a3cfd1' ], 10);
您也可以使用这些方法将模型向上或向下移动
$myModel->moveOrderDown(); $myModel->moveOrderUp();
您也可以将模型移动到第一个或最后一个位置
$myModel->moveToStart(); $myModel->moveToEnd();
您也可以交换两个模型的顺序
MyModel::swapOrder($myModel, $anotherModel);
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。