silverd/laravel-sortable

eloquent模型的可排序行为

dev-master 2024-09-09 16:13 UTC

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"

使用方法

要将可排序行为添加到模型,您必须

  1. 实现 Silverd\LaravelSortable\Sortable 接口。
  2. 使用 traits Silverd\LaravelSortable\SortableTrait
  3. 可选地指定用作排序列的列。默认为 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)。有关更多信息,请参阅许可证文件