Как проверить условия с закрытием в Laravel, только при наличии почтового значения - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь выполнить запрос к базе данных и создать фильтр в функции закрытия, моя модель (упрощенная) выглядит следующим образом:

table1  :   id, ho, hod_id

hodet   :   id, description, dept_id

departments :   id, name, deptcode

$ho и $deptcode будут проходить методом 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();

Заранее спасибо ..

1 Ответ

0 голосов
/ 03 февраля 2020

Я решил эту проблему, изменив код, как показано ниже (где использование неправильно в моем вопросе. Позже я нашел это).

    $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();
...