aripdev / queryable
Laravel 包用于分页、过滤、排序和搜索查询
v1.1.0
2023-02-14 06:05 UTC
Requires
- laravel/framework: 9.*
This package is auto-updated.
Last update: 2024-09-14 10:13:42 UTC
README
本包处理分页、排序、过滤和搜索数据的常见请求。
目录
入门
安装包
composer require aripdev/queryable
包含
将包添加到使用 queryable 的模型中
use Illuminate\Database\Eloquent\Factories\HasFactory; use Laravel\Sanctum\HasApiTokens; use Aripdev\Queryable\HasQueryable; class User extends Authenticatable { use HasQueryable, HasApiTokens, HasFactory; }
用法
这是如何在控制器中调用某些方法的示例。
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { return $user->paginated() ->sorted() ->result(['name']) ->get(); } }
方法
可用方法
分页
-
控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { return $user->paginated() ->result() ->get(); } }
-
使用 URL 参数
_limit
和_page
限制您的数据。例如:
yourdomain/user?_page=1&_limit=5
注意:如果用户在请求中没有提供 _limit
参数,分页的默认限制为 10
排序
-
控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { return $user ->paginated() ->sorted(['name']) ->result() ->get(); } }
通过传递参数方法确保列存在于模型中,以下示例中我们的模型中存在列名称。
-
使用 URL 参数
_sort
和可选的_order
,默认排序为升序例如:
yourdomain/user?_sort=name&_order=desc&_limit=2
过滤
-
控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { return $user ->paginated() ->sorted(['name']) ->filtered(['role']) ->result() ->get(); } }
-
在过滤方法中配置列的 URL 参数,以下示例中我们通过列
role
过滤数据例如:
yourdomain/user?role=developer&_limit=2
搜索
-
控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { return $user ->paginated() ->sorted(['name']) ->filtered(['role']) ->searched(['title']) ->result() ->get(); } }
-
类似于过滤方法,我们将参数列放入 URL 中,我们使用列
title
并在 URL 中放入值q
例如:
yourdomain/user?q=enginering
附加功能
如果您想显示每个查询的数据计数,可以使用 xheader
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class LabController extends Controller { public function index(User $user) { $data = $user ->paginated() ->sorted(['name']) ->filtered(['role']) ->searched(['title']) ->result() ->get(); $xTotalCount = app('xheader')->headers; return response($data, 200, $xTotalCount); } }