owowagency/applies-http-query

此包的最新版本(v3.0.0)没有可用的许可证信息。

v3.0.0 2023-08-18 09:42 UTC

This package is auto-updated.

Last update: 2024-09-18 12:03:59 UTC


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