aripdev/queryable

Laravel 包用于分页、过滤、排序和搜索查询

v1.1.0 2023-02-14 06:05 UTC

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);
    }
}