Skip to content

westhack/laravel-eloquent-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

laravel-eloquent-search

一个简化 laravel model 筛选条件的库

介绍

如果我们想返回由多个参数筛选的用户列表:

/users?username=er&group_id=2&roles[]=1&roles[]=4&roles[]=7&created_at[]=2019-03-05&created_at[]=2019-03-06

$request->all() 的结果:

[
    'username'       => 'er',
    'group_id'   => '2',
    'roles'      => ['1','4','7'],
    "created_at" => ["2019-03-05", "2019-03-06"]
]

要根据这些参数进行筛选,我们需要做如下工作:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;

class UserController extends Controller
{

    public function index(Request $request)
    {
        $query = User::where('group_id', $request->input('group_id'));

        if ($request->has('username'))
        {
            $query->where('username', 'LIKE', '%' . $request->input('username') . '%');
        }

        if ($request->has('created_at'))
        {
            $query->whereBetween('created_at', $request->input('created_at'));
        }

        $query->whereHas('roles', function ($q) use ($request)
        {
            return $q->whereIn('id', $request->input('roles'));
        });

        return $query->get();
    }

}

我们使用 laravel-eloquent-search 来减少工作量

model 引入 search trait
<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use EloquentSearch\SearchTrait;

class User extends Model
{
    use SearchTrait;
}
User Controller
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;

class UserController extends BaseController
{
    public function index(Request $request)
    {
        return User::search($request->all())->get();
    }
}
请求示例
let search = {

    "name": {
        "column": "username",
        "operator": "like",
        "value": "er"
    },
    "group_id": {
        "column": "group_id",
        "operator": "=",
        "value": "2"
    },
    "roles": {
        "column": "roles",
        "operator": "in",
        "value": ["1","4","7"],
    },
    "created_at": {
        "column": "created_at",
        "operator": "between",
        "value": ["2019-03-05", "2019-03-06"]
    }

}

// or 

let search = {
    
    "name:like": "er",
    "group_id:=": 2,
    "roles:in": ["1","4","7"],
    "created_at:between": ["2019-03-05", "2019-03-06"]
    
}

axios.post('http://127.0.0.1:8000/users', search)
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

安装

composer require westhack/laravel-eloquent-search

About

laravel eloquent search

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy