只有当存在post值时,如何在Laravel中使用闭包检查条件
我试图查询数据库并在闭包函数中进行筛选,我的模型(简化)如下所示:只有当存在post值时,如何在Laravel中使用闭包检查条件,laravel,eloquent,closures,multiple-conditions,Laravel,Eloquent,Closures,Multiple Conditions,我试图查询数据库并在闭包函数中进行筛选,我的模型(简化)如下所示: table1 : id, ho, hod_id hodet : id, description, dept_id departments : id, name, deptcode $ho和$deptcode将通过post方法实现 如果没有post值,则需要返回所有数据。这很好用。虽然$ho有数据,但它运行良好。当deptcode有数据时,它也会返回不需要的数据。请纠正我 我的代码如下: $hoaListQ
table1 : id, ho, hod_id
hodet : id, description, dept_id
departments : id, name, deptcode
$ho
和$deptcode
将通过post方法实现
如果没有post值,则需要返回所有数据。这很好用。虽然$ho有数据,但它运行良好。当deptcode有数据时,它也会返回不需要的数据。请纠正我
我的代码如下:
$hoaListQuery = table1::where ([["hod_id", ">", "0"]]);
if($ho != "") {
$hoaListQuery = $hoaListQuery->where('ho', 'like', '%'.$ho.'%');
}
$hoaListQuery = $hoaListQuery
->whereHas([
"hodet" => function($inHodetQuery) use($deptcode) {
$inHodetQuery->whereHas([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
$inDeptQuery->select("id", "name", "deptcode");
}
])->with([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
$inDeptQuery->select("id", "name", "deptcode");
}
])
->select("id", "description", "dept_id");
}
])
->with([
"hodet" => function($inHodetQuery) use($deptcode) {
$inHodetQuery->whereHas([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
$inDeptQuery->select("id", "name", "deptcode");
}
])->with([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
$inDeptQuery->select("id", "name", "deptcode");
}
])->select("id", "description", "dept_id");
}
])
->select("id", "ho", "hod_id");
$hoaList = $hoaListQuery->get();
提前感谢。我通过如下更改代码解决了这个问题(whereHas用法在我的问题中是错误的。后来我发现)
$hoaListQuery = table1::where ([["hod_id", ">", "0"]]);
if($ho != "") {
$hoaListQuery = $hoaListQuery->where('ho', 'like', '%'.$ho.'%');
}
$hoaListQuery = $hoaListQuery
->whereHas("hodet", function($inHodQuery) use($deptcode) {
$inHodQuery->whereHas("departments", function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
}
)->with([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
});
}
]);
}
)
->with([
"hodet" => function($inHodQuery) use($deptcode) {
$inHodQuery->with([
"departments" => function ($inDeptQuery) use($deptcode) {
$inDeptQuery->when($deptcode != "", function ($q) use($deptcode) {
return $q->where('deptcode', '=', $deptcode);
})->select("id", "name", "deptcode");
}
])->select("id", "description", "dept_id");
}
])
->select("id", "ho", "hod_id");
$hoaList = $hoaListQuery->get();