首先,您必须将一个值作为参数传递给find() 方法。这样它将根据给定的id 返回一条记录。如果您没有id 并且想要获取第一条记录,则必须使用first()。
另外你正在使用分页返回结果,我认为你不需要 find() 方法。
应该是
$roles = Role::query();
if (!empty($request->get("globalFilter"))){
$roles->where('name','LIKE','%' . $request->get("globalFilter"). '%');
}
$result=$roles->find($id);
或者你可以在下面的回调中使用 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()。两者都返回一条记录。对于多条记录,您可以使用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
如果您正在寻找返回名称类似的所有角色,那么您可以执行以下操作
$roles = Role::when((!empty($request->globalFilter)),function($query)use($request){
$query->where('name','LIKE','%' . $request->get("globalFilter"). '%');
})->paginate($request->get("perPage"));