使用其他表中的过滤器进行搜索

时间:2017-05-05 15:17:45

标签: laravel

我尝试使用不同的参数构建搜索查询,但有些过滤器列来自与其他表相关的其他表,我不知道如何实现

例如,列#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]);
            });

        }

1 个答案:

答案 0 :(得分:1)

您可以在whereHas搜索中使用withEloquent个关键字。

例如,您有Blog方法连接到User模型。每个博客都由用户发送。如果你想根据他的博客在用户中搜索,你可以使用:

 $user = User::where(function($query){
               $query->where('age','>=',18);

            })->whereHas('blogs', function ($query){

                    $query->where('text', 'LIKE', '%game%');

            });

blogs方法中,代码whereHasUser模型中Eloquent方法的名称。

结果:此代码返回的用户年龄超过18岁,其博客标题为游戏。