sukohi/neatness

一个 Laravel 包,用于自动为数据库查询添加排序系统,并提供 URL 在升序和降序之间切换。

4.0.2 2016-09-21 16:50 UTC

README

一个 Laravel 包,用于自动为数据库查询添加排序系统,并提供 URL 在升序和降序之间切换。
(这是针对 Laravel 5+。 针对 Laravel 4.2)

示例

安装

执行 composer 命令。

composer require sukohi/neatness:4.*

准备

首先,在您的模型中设置 NeatnessTrait

use Sukohi\Neatness\NeatnessTrait;

class Item extends Eloquent {

    use NeatnessTrait;

}

其次,也在您的模型中添加配置值。

default: 默认键和方向。(必需)
columns: 您想要排序的键和列名。(必需)
symbols: 您可以在视图中使用的标签。(可选)
symbols: 您可以在视图中使用的符号。(可选)
appends: 您想要附加到 URL 的键。(可选)

protected $neatness = [
    'default' => ['sort_id', 'desc'],
    'columns' => [
        'sort_id' => 'id',
        'sort_title' => 'title',
        'sort_date' => 'created_at'
    ],
    'labels' => [
        'sort_id' => 'ID',
        'sort_title' => 'Title',
        'sort_date' => 'Date'
    ],
    'symbols' => [
        'asc' => '<i class="fa fa-sort-asc"></i>',
        'desc' => '<i class="fa fa-sort-desc"></i>',
        'default' => '<i class="fa fa-sort"></i>'
    ],
    'appends' => ['name']
];

多列: 如果您想要按多列排序,可以使用分隔符 |,如下所示。

'columns' => [
    'id_n_title' => 'id|title'
],

查询作用域: 您还可以使用 Query Scopes 代替列名。

'columns' => [
    'scope_title' => 'scope::sortTitle'
],

在这种情况下,您需要在您的模型中准备一个作用域方法。(关于查询作用域

public function scopeSortTitle($query, $direction) {

    return $query->orderBy('title', $direction);

}

标签: 您可以使用 label:: 前缀来调用特定方法。

'labels' => [
    'title' => 'label::SortTitle'
],

在这种情况下,您需要在您的模型中准备一个方法。

public function labelSortTitle() {

    return 'Your Title'.

}

使用

现在,您可以使用名为 neatness 的方法。

(在控制器中)

$items = Item::neatness()->get();

调用 neatness() 之后,您可以通过 $neatness 访问排序数据。

(在视图中)

key: 当前排序的键名。

Key: {{ $neatness->key }}

column: 当前排序的列名。

Column: {{ $neatness->column }}

direction: 当前排序的方向。《asc》或《desc》

Direction: {{ $neatness->direction }}

urls: 切换排序的 URL。

@foreach($neatness->urls as $key => $url)
    {{ $key }} => {{ $url }}
@endforeach

or 

$neatness->urls->get('title');

all_urls: 所有切换排序的 URL。

@foreach($neatness->all_urls as $key => $urls)
    @foreach($urls as $direction => $url)
        {{ $direction }} => {{ $url }}<br>
    @endforeach
@endforeach

or 

$neatness->all_urls->get('title');          // Array
$neatness->all_urls->get('title')['desc']   // URL

labels: 您在模型中设置的标签。

@foreach($neatness->labels as $key => $label)
    {{ $key }} => {{ $label }}
@endforeach

or 

$neatness->labels->get('title');

symbols: 根据排序状态提取的符号。

@foreach($neatness->symbols as $key => $symbol)
    {{ $key }} => {{ $symbol }}
@endforeach

or 

$neatness->symbols->get('title');

texts: 主要用于链接的文本。

@foreach($neatness->urls as $key => $url)
    <a href="{{ $url }}">{{ $neatness->texts->get($key) }}</a>
@endforeach

or 

$neatness->texts->get('title');

appends: 分页的数组值

{{ $items->appends($neatness->appends)->links() }}

更改默认列和方向

通过这种方式,您可以更改默认列和方向。

Item::neatness('title', 'desc')->get();

关联

您可以使用 join() 使用此包与关联。

(在控制器中)

$items = Item::join('item_details', 'item_details.item_id', '=', 'items.id')
            ->neatness()
            ->paginate(5);

(在模型中)

protected $neatness = [
	'default' => ['items.id', 'desc'],
	'columns' => [
		'id' => 'items.id',
		'title' => 'items.title',
		'date' => 'items.created_at',
		'address' => 'item_details.address'
	]
];

许可证

此软件包在 MIT 许可证下发布。

版权所有 2016 Sukohi Kuhoh