Laravel-使用with方法对多个渴望加载的关系使用多重查询功能

问题描述 投票:0回答:1

我正在查询父模型具有多个关系的地方。

当我仅创建一个要过滤的关系时,我的查询返回正确的数据,过滤器正常工作。

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();
laravel relationship query-builder
1个回答
0
投票

您尝试过吗?

->with(['tickets' => function ($query) {
    //your code
}. 'notes', 'groups.user'])->get();
© www.soinside.com 2019 - 2024. All rights reserved.