Laravel 使用无条件查找和动态 where 条件
Laravel using find without condition and dynamic where condition
我想查询一个 eloquent 方法然后进行分页。所以我把代码写成
$roles = Role::find();
if (!empty($request->get("globalFilter"))){
$roles->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
return response()->json($roles->paginate($request->get("perPage")));
以上抛出如下错误
too few arguments on function builder find
如何在上面的查询中调用 where
和 paginate
?
首先你必须将一个值传递给 find()
方法作为 parameter.So 它会根据给定的 id return 一条记录。如果你没有 id 并且想先获取记录然后你必须使用first()
。
您还使用分页 return 结果,我认为您不需要 find() 方法。
应该是
$roles = Role::query();
if (!empty($request->get("globalFilter"))){
$roles->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
$result=$roles->find($id);
或者您可以在 where 回调中使用 if 条件,如下所示
$roles = Role::where(function ($query)use($request){
if(!empty($request->globalFilter)){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
})->find($id);
或者您可以使用 when
使查询更简单
$roles = Role::when((!empty($request->globalFilter)),function($query)use($request){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
})->find($id);
注意: 对于 find()
方法,您必须将一个参数作为 id
传递,或者您必须使用 first()
。两者都 return一条record.For多条记录可以用all()
或get()
when 子句参考:https://laravel.com/docs/8.x/queries#conditional-clauses
first() 和 find() 参考:https://laravel.com/docs/8.x/queries#retrieving-a-single-row-column-from-a-table
如果您正在寻找 return 名称类似的所有角色,那么您可以执行以下操作
$roles = Role::when((!empty($request->globalFilter)),function($query)use($request){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
})->paginate($request->get("perPage"));
我想查询一个 eloquent 方法然后进行分页。所以我把代码写成
$roles = Role::find();
if (!empty($request->get("globalFilter"))){
$roles->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
return response()->json($roles->paginate($request->get("perPage")));
以上抛出如下错误
too few arguments on function builder find
如何在上面的查询中调用 where
和 paginate
?
首先你必须将一个值传递给 find()
方法作为 parameter.So 它会根据给定的 id return 一条记录。如果你没有 id 并且想先获取记录然后你必须使用first()
。
您还使用分页 return 结果,我认为您不需要 find() 方法。
应该是
$roles = Role::query();
if (!empty($request->get("globalFilter"))){
$roles->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
$result=$roles->find($id);
或者您可以在 where 回调中使用 if 条件,如下所示
$roles = Role::where(function ($query)use($request){
if(!empty($request->globalFilter)){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
})->find($id);
或者您可以使用 when
使查询更简单
$roles = Role::when((!empty($request->globalFilter)),function($query)use($request){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
})->find($id);
注意: 对于 find()
方法,您必须将一个参数作为 id
传递,或者您必须使用 first()
。两者都 return一条record.For多条记录可以用all()
或get()
when 子句参考:https://laravel.com/docs/8.x/queries#conditional-clauses
first() 和 find() 参考:https://laravel.com/docs/8.x/queries#retrieving-a-single-row-column-from-a-table
如果您正在寻找 return 名称类似的所有角色,那么您可以执行以下操作
$roles = Role::when((!empty($request->globalFilter)),function($query)use($request){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
})->paginate($request->get("perPage"));