alfredoihublab / query-filter-laravel
由课程面板 Styde 提供的 eloquent orm 查询轻松应用过滤器
dev-master
2023-05-09 22:05 UTC
Requires
- php: ^7.2.5|^8.0|^8.1
- laravel/framework: 6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.4|8.5.8|^9.3.3|^10.0
This package is not auto-updated.
Last update: 2024-09-25 05:10:56 UTC
README
此项目使用 Composer 来管理其依赖项。因此,在安装此包之前,请确保您的机器上已安装 Composer。
运行以下命令
composer --version
安装
通过 Composer 安装包
composer require fguzman/query-filter-laravel
如何使用它
使用以下命令创建一个新的 QueryClass:make:query
并创建一个新的 FilterClass,可以使用 make:filter
命令。
一旦创建了这些类,您必须在每个类中实现所需的逻辑。
注意:您的查询类必须与您为其创建的模型相关联,这样您就不会在过滤器中遇到错误。
例如,考虑 User 模型
php artisan make:query UserQuery
上述命令将创建一个名为 UserQuery 的文件,具有以下结构
<?php
namespace App\Models\Queries;
use Fguzman\QueryBuilder;
class UserQuery extends QueryBuilder
{
//
}
然后是以下命令
php artisan make:filter FilterUser
此命令将创建一个名为 UserFilter 的 PHP 文件,具有以下结构。
<?php
namespace App\Filters;
use Fguzman\QueryFilter;
class UserFilter extends QueryFilter
{
/**
* Get the validation rules that apply to the request filter
* @return array
*/
public function rules(): array
{
return [
//
];
}
}
一旦创建了这些类,您必须将 QueryClass 与模型关联起来。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Filters\UserFilter;
use App\Models\Queries\UserQuery;
class User extends Model
{
public function newQueryFilter()
{
return new UserFilter();
}
public function newEloquentBuilder($query)
{
return new UserQuery($query);
}
}
一旦关联了 QueryClass,您就可以创建此第一个基本查询过滤器
在您的 UserQuery 文件中
<?php
namespace App\Models\Queries;
use Fguzman\QueryBuilder;
class UserQuery extends QueryBuilder
{
public function findByName($name)
{
return $this->where(compact('name'))->first();
}
}
现在您可以使用以下方式使用此查询
User::query()->findByName('John');
现在,对于 UserFilter 文件,您可以按以下方式使用
<?php
namespace App\Filters;
use Fguzman\QueryFilter;
use App\Models\Queries\UserQuery;
class UserFilter extends QueryFilter
{
public function rules(): array
{
return [
'search' => 'filled',
];
}
public function search(UserQuery $query, $search)
{
return $query->where(function ($query) use ($search) {
$query->where('name', 'like', "%{$search}%")
->orWhere('email', 'like', "%{$search}%");
});
}
}
现在,在您的 UserController 中
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function index()
{
$users = User::query()->applyFilters()->paginate();
return view('users.index', compact('users'));
}
}
安全性
如果您发现任何安全问题,请通过电子邮件发送给我们 felipe-guzman.c@hotmail.com