kalimeromk / filterable
解决添加重复过滤代码的常见问题
v1.6
2023-11-27 19:09 UTC
Requires
- php: >=8.0
Requires (Dev)
- orchestra/testbench: ^6.0
README
在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)。有关更多信息,请参阅许可证文件。