doncadavona / eloquenturl
轻松通过查询参数搜索和过滤 Laravel Eloquent 模型。
Requires
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-29 06:31:04 UTC
README
Eloquenturl 会自动为您的 Eloquent 模型添加搜索和过滤功能,使用的是 查询字符串。
Eloquenturl 尊重您 Eloquent 模型的 $fillable 和 $hidden 属性,以提供合理的默认值,提供零配置使用。例如
return \Doncadavona\Eloquenturl\Eloquenturl::eloquenturled(\App\Models\User::class, $request);
只需传递模型和请求,模型就变得可搜索和可过滤,无需您管理哪些属性是可查询的,也不需要编写复杂的逻辑和数据库查询。
Eloquenturl 很快,因为它作为一个单独的数据库查询构建和执行。
阅读 Eloquenturl: A Laravel Package to Simplify or Eliminate Query Building for URL Parameters。
目录
I. 安装
使用 Composer 安装
composer require doncadavona/eloquenturl
II. 使用方法
Eloquenturl::eloquenturled()
使用 Eloquenturl::eloquenturled() 快速构建和执行基于请求查询参数的数据库查询。它返回给定 Eloquent 模型的分页条目,基于 URL 参数和模型的 $fillable 和 $hidden 属性。只需传递模型和请求
$users = \Doncadavona\Eloquenturl\Eloquenturl::eloquenturled(User::class, request());
Eloquenturl::eloquenturl()
当您需要添加额外的查询,例如预加载,或 Laravel 查询构建器中可用的任何其他数据库查询时,请使用 Eloquenturl::eloquenturl()。
以下是一个包含多个示例的 UsersController。
<?php use App\Models\User; use App\Models\Article; use App\Http\Controllers\Controller; use Doncadavona\Eloquenturl\Eloquenturl; use Illuminate\Http\Request; class UsersController extends Controller { public function index(Request $request) { // It's this easy. $users = Eloquenturl::eloquenturled(User::class, $request); // Or, add your own sauce. $users = Eloquenturl::eloquenturl(User::class, $request) ->with(['roles', 'articles', 'comments']) ->paginate(); // Or, with select query and simplePaginate $users = Eloquenturl::eloquenturl(User::class, $request) ->select('name', 'description') ->simplePaginate($request->per_page); return $users; // Or, use any other Eloquent model. $articles = Eloquenturl::eloquenturl(Article::class, $request) ->with(['user', 'comments']) ->get(); return $articles; } }
以下是一些带有查询参数的示例 URL
https://:8000/users?search=apple https://:8000/users?order_by=created_at&order=desc https://:8000/users?scopes[role]=admin&scopes[status]=active&company_id=3 https://:8000/users?search=apple&search_by=first_name&order_by=created_at&order=desc&scopes[role]=admin&scopes[status]=active&company_id=3
III. 查询参数
- page
- per_page
- search
- search_by
- order
- order_by
- 作用域
- lt (小于)
- gt (大于)
- lte (小于或等于)
- gte (大于或等于)
- min (gte 的别名)
- max (lte 的别名)
page
/users?page=5
per_page
/per_page?page=100
search
/users?search=john
/users?search=john+doe
/users?search=john%20doe
search_by
/users?search=john&search_by=first_name
/users?search=john+doe&search_by=last_name
/users?search=johndoe&search_by=email
order
/users?order=desc
order_by
/users?order_by=age
作用域
/users?scopes[status]=active
/users?scopes[senior]
/users?scopes[admin]
lt (小于)
/users?lt[age]=18
gt (大于)
/users?gt[age]=17
lte (小于或等于)
/users?lte[age]=18
gte (大于或等于)
/users?gte[age]=60
min (gte 的别名)
/users?min[age]=18
max (lte 的别名)
/users?max[age]=18
当请求中存在未知参数时,它们将使用 WHERE 子句 以等价条件进行查询。例如
/users?active=true /users?status=suspended /users?country=PH /users?planet_number=3 /users?company_id=99
等效的数据库查询将是
SELECT * FROM `users` WHERE `active` = true; SELECT * FROM `users` WHERE `status` = 'suspended'; SELECT * FROM `users` WHERE `country` = 'PH'; SELECT * FROM `users` WHERE `planet_number` = 3; SELECT * FROM `users` WHERE `company_id` = 99;
IV. 更新日志
请参阅 changelog 了解最近的变化。
V. 测试
$ composer test
VI. 贡献
请参阅 contributing.md 了解详细信息和工作列表。
VII. 安全
如果您发现任何与安全相关的问题,请通过电子邮件 dcadavona@gmail.com 联系,而不是使用问题跟踪器。
VIII. 致谢
IX. 许可证
MIT。有关更多信息,请参阅 license 文件。