我尝试使用不同的参数构建搜索查询,但有些过滤器列来自与其他表相关的其他表,我不知道如何实现
例如,列#34; compet_id"来自我的表Rencontre。
在我的表格RencontreOfficiel中,我有rencontre_id与" Rencontre"
建立关系我不确定我是否清楚它有点难以解释;希望有人能看到和帮助。
这是我的控制器:
$query = RencontreOfficiel::query();
$filters = [
'compet_id' => 'compet_id',
'structure_id' => 'structure_id',
'catg_compet_id' => 'dt_rencontre',
'fonction_id' => 'dt_rencontre',
'bareme_id' => 'bareme_id',
'dt_min_rencontre' => 'dt_rencontre',
'dt_max_rencontre' => 'dt_rencontre',
];
$dt_min = $request->input('dt_rencontre_min');
$dt_max = $request->input('dt_rencontre_max');
foreach ($filters as $key => $column) {
$query->when($request->{$key}, function ($query, $value) use ($column , $dt_min , $dt_max) {
$query->where($column, $value)->orWhereBetween('dt_rencontre' , [$dt_min , $dt_max]);
});
}
答案 0 :(得分:1)
您可以在whereHas
搜索中使用with
和Eloquent
个关键字。
例如,您有Blog
方法连接到User
模型。每个博客都由用户发送。如果你想根据他的博客在用户中搜索,你可以使用:
$user = User::where(function($query){
$query->where('age','>=',18);
})->whereHas('blogs', function ($query){
$query->where('text', 'LIKE', '%game%');
});
在blogs
方法中,代码whereHas
是User
模型中Eloquent方法的名称。
结果:此代码返回的用户年龄超过18岁,其博客标题为游戏。