app-ark/eloquent-sortable

eloquent模型的排序行为

v0.0.2 2019-08-15 10:20 UTC

This package is auto-updated.

Last update: 2024-09-15 21:37:59 UTC


README

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

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

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

该包还提供了一个查询范围,用于获取所有记录的正确顺序。

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

明信片软件

您可以自由使用此包(它是MIT许可),但如果它进入了您的生产环境,您需要向我们寄送一张您家乡的明信片,注明您正在使用我们哪些包。

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

最好的明信片将发布在我们的网站上开源页面。

安装

此包可以通过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,
    ];
    
    ...
}

如果您未设置值$sortable['order_column_name'],则包将假设您的排序列名为order_column

如果您未设置值$sortable['sort_when_creating'],则包将自动将最高排序号分配给新模型;

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