baraveli/laravel-query-filters

一种最小化方法,通过查询参数过滤eloquent模型

v1.0 2021-01-26 20:55 UTC

This package is auto-updated.

Last update: 2024-09-27 05:02:57 UTC


README

一种最小化方法,通过查询参数过滤eloquent模型

安装

composer require baraveli/laravel-query-filters

使用

在您的Laravel应用程序中创建自定义过滤器类

在这种情况下,我有一个针对用户模型的过滤器。每个过滤器都应该扩展baraveli的 QueryFilter 类。每个过滤器类中的方法名与URL参数名相对应,因此在这种情况下,当调用 ?search="ssd" 时,实际上是在调用 search() 方法

<?php

namespace App\Filters;

use Illuminate\Database\Eloquent\Builder;
use Baraveli\QueryFilters\QueryFilter;

class UsersFilters extends QueryFilter
{        
    /**
     * per_Page
     *
     * @param  mixed $number
     * @return void
     */
    public function per_Page($number = 5)
    {
        return $this->builder->paginate($number);
    }

    /**
     * search
     *
     * @param  mixed $search
     * @return Builder
     */
    public function search($search) : Builder
    {
        return $this->builder->where('name','like', '%' . $search .'%');
    }

    
}

为您的Eloquent模型添加可过滤特征

添加此特征将为您在Laravel模型中提供 filter() 范围,您可以使用它来应用之前的查询过滤器

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Baraveli\QueryFilters\Filterable;

class User extends Authenticatable
{
    use HasFactory, Notifiable, Filterable;
}

响应

现在在控制器或路由中返回并应用过滤器

Route::get('users', function(UsersFilters $usersfilter){
    return User::filter($usersfilter)->get();
});

现在您可以使用查询过滤器如下

  • /api/users?search=Ms : 搜索所有用户名称
  • /api/users?search=Ms&per_page=5 : 搜索所有用户名称并分页结果