2017-05-05 104 views
0

過濾器我嘗試建立與不同PARAMS搜索查詢,但是一些過濾器列來自誰在與另一臺關係的其他表,我不知道如何做到這一點搜索與其他表

例如,來自我的表Rencontre的列「compet_id」。

在我的桌子RencontreOfficiel我已經rencontre_id使關係與「論戰」

我不知道我是否清楚這是一個有點難以解釋;希望有人能看到和幫助。

這裏我的控制器:

$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

可以在Eloquent搜索中使用whereHaswith關鍵字。

例如,您有Blog方法連接到User模型。每個博客由用戶發送。如果你想在用戶搜索根據他的博客你可以使用這個:

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

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

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

      }); 

在這段代碼blogswhereHas方法是雄辯的方法的名稱User模型。

結果:此代碼返回年齡超過18歲的用戶,其博客的標題類似於遊戲。