Laravel报错:Atividades_list需Atividade_de_Risco实例却传入数组
报错信息
传递给
App\Http\Controllers\DashboardController::Atividades_list()的第1个参数必须是App\Atividade_de_Risco的实例,实际传入了数组
关联业务代码
public function Atividades_list(Atividade_de_Risco $atividades){ //$atividades = Atividade_de_Risco::all(); return Datatables::of($atividades)->make(true); } public function Atividades(Request $request){ //dd($request->all()); $atividades = Atividade_de_Risco::all(); $atividades_ [] = new Atividade_de_Risco; $user_atvs = Usuario_atividade::all(); $id = Auth()->user()->id; $i = 0; $this->Atividades_list($atividades_); //
报错原因
Atividades_list方法对参数加了单模型类型约束,要求传入的必须是单个Atividade_de_Risco模型实例,不支持接收数组、模型集合这类批量数据。- 调用时传入的
$atividades_是数组类型:代码中$atividades_ [] = new Atividade_de_Risco;的写法是初始化一个数组,再往数组内追加一个空的模型实例,本质是数组,和参数要求的类型完全不匹配。
修复方法
根据Datatables返回批量数据的业务场景,选对应方案调整即可:
- 最简改法:去掉
Atividades_list的单模型参数约束,直接在方法内部完成数据查询,不需要额外传参
public function Atividades_list(){ $atividades = Atividade_de_Risco::all(); return Datatables::of($atividades)->make(true); } public function Atividades(Request $request){ $user_atvs = Usuario_atividade::all(); $id = Auth()->user()->id; // 直接调用即可,不需要传数组参数 return $this->Atividades_list(); }
- 如果要保留传参的逻辑拆分,就把参数类型改成和传入数据匹配的类型,比如传入模型集合就约束为集合类型,同时删掉无意义的空数组初始化逻辑
use Illuminate\Support\Collection; public function Atividades_list(Collection $atividades){ return Datatables::of($atividades)->make(true); } public function Atividades(Request $request){ $atividades = Atividade_de_Risco::all(); $user_atvs = Usuario_atividade::all(); $id = Auth()->user()->id; // 传入查询得到的模型集合即可 return $this->Atividades_list($atividades); }
内容的提问来源于stack exchange,提问作者enzo patriarca
相关产品推荐
相关产品推荐

