我正在查询父模型具有多个关系的地方。
当我仅创建一个要过滤的关系时,我的查询返回正确的数据,过滤器正常工作。
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();
您尝试过吗?
->with(['tickets' => function ($query) {
//your code
}. 'notes', 'groups.user'])->get();