Laravel无参数调用find加动态where后分页的报错问题咨询
错误原因
find() 是Eloquent提供的按主键查询单条记录的方法,必须传入对应主键值作为参数,你这里直接调用find()不传参数,自然会抛出参数不足的错误,而且这个方法返回的是模型实例/空,也不能继续链式调用where()、paginate()这类查询构造器方法。
修正方案
初始化查询构造器应该调用query()方法,调整后的代码如下:
$roles = Role::query(); if (!empty($request->get("globalFilter"))){ $roles->where('name','LIKE','%' . $request->get("globalFilter"). '%'); } // 给perPage设置默认值,避免参数为空时报错 return response()->json($roles->paginate($request->get("perPage", 10)));
可选简化写法
可以用Laravel提供的when()条件查询方法简化代码,省略手动if判断:
return response()->json( Role::query() ->when($request->filled('globalFilter'), function ($query) use ($request) { $query->where('name', 'LIKE', "%{$request->get('globalFilter')}%"); }) ->paginate($request->get('perPage', 10)) );
内容的提问来源于stack exchange,提问作者Geoff
相关产品推荐
相关产品推荐

