owowagency / applies-http-query
此包的最新版本(v3.0.0)没有可用的许可证信息。
v3.0.0
2023-08-18 09:42 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0
- illuminate/support: ^10.0
Requires (Dev)
- phpunit/phpunit: ^9.5
README
此包包含一个可以在 Eloquent 模型上使用的特性。该特性添加了一个 httpQuery
范围,可以应用“搜索”和“排序”。只有当 URL 查询参数存在时,它才会应用这两个功能。
安装
composer require owowagency/applies-http-query
此包支持 Laravel 版本 5 到 7。请检查 1.x 分支。
用法
将特性添加到模型中
use OwowAgency\AppliesHttpQuery\AppliesHttpQuery;
class Post extends Model
{
use AppliesHttpQuery
}
指定可以搜索的列
/**
* Http queryable rules.
*
* @var array
*/
protected $httpQueryable = [
'columns' => [
'posts.title'
'users.name',
],
'joins' => [
'users' => ['posts.user_id','users.id'],
'countries' => ['users.country_id', 'countries.id']
],
];
调用范围
Post::httpQuery()->paginate();
// Like all other scopes it can be combined with other clauses.
Post::whereNull('deleted_at')->httpQuery()->get();
为了使范围正常工作,URL 中应存在某些查询参数
search
,要搜索的值。order_by
,要排序的列。sort_by
,排序方向。默认为asc
。
搜索
https://mysite.com/posts?search=test
将产生以下查询
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id WHERE (posts.title LIKE "%test%" OR users.name LIKE "%test%")
排序
https://mysite.com/posts?order_by=user.name
将产生以下查询
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id ORDER BY users.name ASC
https://mysite.com/posts?order_by=user.country.name&sort_by=desc
将产生以下查询
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id INNER JOIN countries ON users.country_id = country.id ORDER BY countries.name desc