2014-03-14 48 views
0

我建立這需要在3個主表上執行搜索的搜索形式: 用戶,users_info和users_data加入和動態`Where`在Laravel4雄辯

的事情是,我不知道有多少過濾器我從查詢中獲得,是否有一種方法來查詢並設置where?是這樣的:

return User::join('personal_info','users.id','=','personal_info.user_id') 
    ->leftJoin('user_data','users.id','=','user_data.user_id', function($q){ 
     foreach ($filters as $field => $value) { 
      $q->where($field,'=',$value) 
     } 
    }) 
->get(); 

回答

1

得到它,我可以分配拼接爲一個變量,然後循環,並添加條件:

$query = Model::join('users_data','user.id','=','users_data.id'); 
foreach ($conditions as $cond) { 
$query->where('...'); 
} 
1

這是真的。

而且如果你還沒有初始化雄辯模式將其分配到像變量的初始方法:

$query = Model::join('users_data','user.id','=','users_data.id'); 

您可以使用關鍵字實例化,象下面這樣:

$query = new Model; 

然後循環並添加其中語句動態。

下面是一個例子:

 $items = new Model; 

     if (Input::has('param1')) 
      $items = $items->where('param1_id', '=', Input::get('param1')); 
     if (Input::has('param2')) 
      $items = $items->where('param2_id', '=', Input::get('param2')); 
     if (Input::has('param3')) 
      $items = $items->where('param3_id', '=', Input::get('param3')); 
     if (Input::has('param4')) 
      $items = $items->where('param4_id', '=', Input::get('param4')); 

     $items = $items->get(); 

我發現在Laravel社區解決方案的一部分:http://forumsarchive.laravel.io/viewtopic.php?id=2985