Laravel - Функция множественного запроса для нескольких загруженных отношений с использованием метода - PullRequest
0 голосов
/ 06 апреля 2020

Я делаю запрос, в котором родительская модель имеет несколько отношений.

Мой запрос возвращает правильные данные, когда я создаю только одну связь, которую я хочу отфильтровать, фильтр работает нормально.

some code before...

 ->with(['tickets' => function ($query) {
        if (($this->request->has('tickets_initial_date') && !is_null($this->request->get('tickets_initial_date'))) && ($this->request->has('tickets_final_date') && !is_null($this->request->get('tickets_final_date')))) {
            $query->whereBetween("tickets.created_at", ["{$this->request->get('tickets_initial_date')} 00:00:00", "{$this->request->get('tickets_final_date')} 23:59:59"]);
        } else if ($this->request->has('tickets_initial_date') && !is_null($this->request->get('tickets_initial_date'))) {
            $query->where("tickets.created_at", ">=", "{$this->request->get('tickets_initial_date')} 00:00:00");
        } else {
            $query->where("tickets.created_at", "<=", "{$this->request- 
       >get('tickets_final_date')} 23:59:59");
        }
}])->get();

Если я добавлю другие отношения в with(), это не отфильтрует нужные данные и вернет все.

код, который возвращает все без моих фильтров.

->with(['tickets' => function ($query) {

if (($this->request->has('tickets_initial_date') && !is_null($this->request- 
>get('tickets_initial_date'))) && ($this->request->has('tickets_final_date') && 
!is_null($this->request->get('tickets_final_date')))) {
    $query->whereBetween("tickets.created_at", ["{$this->request- 
>get('tickets_initial_date')} 00:00:00", "{$this->request->get('tickets_final_date')} 
23:59:59"]);
} else if ($this->request->has('tickets_initial_date') && !is_null($this->request- 
>get('tickets_initial_date'))) {
    $query->where("tickets.created_at", ">=", "{$this->request->get('tickets_initial_date')} 00:00:00");
} else {
    $query->where("tickets.created_at", "<=", "{$this->request->get('tickets_final_date')} 23:59:59");
}

}])->with(['notes', 'groups.user'])->get();

единственная проблема - когда я добавляю больше отношений, как вы можете видеть в последнем блоке кода выше.

код, который я добавляю, чтобы получить остальные отношения:

->with(['notes', 'groups.user'])->get();

Я не знаю, что не так, это работает, но не с последними отношениями with():

->with(['notes', 'groups.user'])->get();

1 Ответ

0 голосов
/ 07 апреля 2020

Вы пробовали это?

->with(['tickets' => function ($query) {
    //your code
}, 'notes', 'groups.user'])->get();
...