只有当存在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();