kalimeromk/filterable

解决添加重复过滤代码的常见问题

v1.6 2023-11-27 19:09 UTC

This package is auto-updated.

Last update: 2024-09-27 21:05:41 UTC


README

Software License Total Downloads

在Laravel中,我们经常遇到添加重复的过滤代码、排序和搜索的问题,这个包将解决这个问题。

安装

composer require kalimeromk/filterable

过滤属性的使用

要使用Filterable特性,我们需要将特性包含到我们的模型中

Use Filterable;

在模型类中添加Filterable特性时,我们还需要添加一些属性。

$getFillable: Specify all the fields which exist in your table.
$boolFields:- Add fields on which you want to apply Boolean filtering.

示例

        protected array $getFillable = [
            'name',
            'email',
            'address',
        ];
        protected array $boolFields = [
            'is_active',
        ];

以上所有更改完成后,现在我们只需要调用带有请求数组数据的filter()函数。

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;

class UsersController extends Controller
{
	protected $model;
  
	public function __construct(User $model)
	{
		$this->model = $model;
	}
  
	public function index(Request $request)
	{
		$users = $this->model
                  ->filter($request->all())
                  ->get();
		
		return view('users.index', compact('users'));
	}
}

排序属性的使用

要使用Sortable特性,我们需要将特性包含到我们的模型中

Use Sortable;

在模型类中添加Sortable特性时,我们还需要添加一些属性。

$sortable:- Add fields on which you want to apply sort property.

示例

        protected array $sortable = [
            'id',
            'name',
            'email',
            'address'
        ];

以上所有更改完成后,现在我们只需要调用带有请求数组数据的sort()函数。

以下示例允许对id、name、email、address列进行排序

<?php

namespace App;

use Kalimeromk\Filterable\Trait\Sortable;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use Sortable;

    public $sortables = ['id', 'name', 'email', 'address'];
}

特性使用

以下是一个使用可排序特性的示例(查询作用域)。

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;

class UsersController extends Controller
{
	protected $model;
  
	public function __construct(User $model)
	{
		$this->model = $model;
	}
  
	public function index(Request $request)
	{
		$users = $this->model
                  ->sort($request->all())
                  ->get();
		
		return view('users.index', compact('users'));
	}
}

whereLike属性的使用

要使用whereLike搜索,首先需要指定所有要搜索的表行,尝试

$likeRows:- Add fields on which you want to apply whereLike property.

示例

    public const likeRows = [
        'name',
        'email',
        'address'
   ];

以上所有更改完成后,现在我们只需要调用带有请求数组数据的whereLike()函数。

以下示例允许对name、email、address列进行搜索

<?php

namespace App;

use Kalimeromk\Filterable\Trait\Sortable;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public const likeRows = [
        'name',
        'email',
        'address'
        ];
}

此方法可以用于搜索尝试关系,只需更新const以关系和搜索行名称即可

 public const likeRows = [
        'name',
        'email',
        'address',
        'country.name'
        ];

whereLike使用

以下是一个使用whereLike方法的示例(查询作用域)。

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;

class UsersController extends Controller
{
	protected $model;
  
	public function __construct(User $model)
	{
		$this->model = $model;
	}
  
	public function index(Request $request)
	{
		$users = $this->model
                  ->whereLike(User::likeRows, Arr::get($request, 'search'))
                  ->get();
		
		return view('users.index', compact('users'));
	}
}

注意:这也与过滤、排序和分页一起工作

$users = $this->model->whereLike(User::likeRows, Arr::get($request, 'search'))->sort($request->all())->filter($request->all())->paginate(10)

测试

使用以下命令运行测试

vendor/bin/phpunit

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

致谢

安全性

如果您发现任何安全问题,请通过zbogoevski@gmail.com或使用问题跟踪器发送电子邮件。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件