Laravel 查询关系 where 子句

Posted

技术标签:

【中文标题】Laravel 查询关系 where 子句【英文标题】:Laravel query relationship where clause 【发布时间】:2017-07-26 03:17:24 【问题描述】:

我需要按部门过滤,例如where('departamento_id', '=', 1)

表格:

membro_bancas
id
departamento_id
user_id


trabalhos
id
titulo
orientador_id (references id of membro_bancas)
coorientador_id (references id of membro_bancas)

我有这个代码:

$trabalho = Trabalho::with('membrobanca.departamento')
    ->with('coorientador')
    ->with('academico')
    ->get();

然后返回:

【问题讨论】:

尝试做 $trabalho = Trabalho::with('membrobanca.departamento') ->with('coorientador') ->with('academico') ->where('membrobanca.departamento.departamento_id ', '=' , 1) ->get(); 顺便说一句,您要过滤哪个 ID?是在“membrobanca”还是在“departamento”? 有什么区别?因为我需要用你的 Academicos、membrobancas 和 coorientador 检索所有 Trabalhos,并按 departamento of membrobanca 过滤 如果是这种情况,那么您可以编写所有过滤器。所以,例子。 ->where('coorientador.departamento_id', '=', 1) ->where('membrobancas.departamento_id', '=', 1) 不,很遗憾。 【参考方案1】:

我明白了!

我也需要为coorientador 添加orWhereHas。结果是这样的:

Trabalho::whereHas('membrobanca', function($q) use ($departamento_id) 
    $q->where('departamento_id', '=', $departamento_id);
)
->orWhereHas('coorientador', function($q) use ($departamento_id) 
    $q->where('departamento_id', '=', $departamento_id);
)
->with('academico')
->get();

【讨论】:

【参考方案2】:

使用 whereas

试试这个 eloquent 过滤器
$trabalho = Trabalho::whereHas('membrobanca',function($query) use ($id)
     $query->where('departamento_id', '=', $id)
)
->with('coorientador')
->with('academico')
->get();

使用 with

的过滤器示例
$trabalho = Trabalho::with(['membrobanca',function($query) use ($id)
     $query->where('departamento_id', '=', $id)
])
->with('coorientador')
->with('academico')
->get();

【讨论】:

谢谢!!!适用于 membrobanca 以及如何适用于 coorientador?我尝试为 coorientador 添加whereHas,但没有成功... 你需要为 coorientador 过滤什么?

以上是关于Laravel 查询关系 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

Laravel关系列'id'在where子句中不明确

Laravel 6:如何将多个 where 子句添加到关系中

如何在 laravel 雄辩的关系中使用 where 子句

Laravel 查询不使用 where 子句作为日期

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?