一个简化 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();
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use EloquentSearch\SearchTrait;
class User extends Model
{
use SearchTrait;
}
<?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('https://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