johankladder/eloquent-sortable

为 eloquent 模型添加可排序行为

3.4.1 2017-08-31 11:07 UTC

This package is auto-updated.

Last update: 2024-09-05 06:07:23 UTC


README

Latest Version SensioLabsInsight Build Status Quality Score Software License StyleCI Total Downloads

此包提供了一个特质,可以为 Eloquent 模型添加可排序行为。

新记录的排序列的值由该模型所有记录的排序列的最大值加 1 决定。

此包还提供了一个查询范围,用于按正确顺序检索所有记录。

Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里

安装

此包可以通过 Composer 安装。

$ composer require spatie/eloquent-sortable

用法

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

  1. 指定模型将遵循 Spatie\EloquentSortable\Sortable
  2. 使用特质 Spatie\EloquentSortable\SortableTrait
  3. 指定哪个列将用作排序列

示例

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)。有关更多信息,请参阅许可文件