fguzman / query-filter-laravel
由课程面板 Styde 开发,轻松将过滤器应用于您的 eloquent orm 查询
0.1.3
2024-04-07 06:39 UTC
Requires
- php: ^7.2.5|^8.0|^8.1|^8.2
- laravel/framework: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^8.4|8.5.8|^9.3.3|^10.0
This package is auto-updated.
Last update: 2024-09-07 07:29:29 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