我正构建一个需要在3个主表中执行搜索的搜索表单: users,users_info和users_data
问题是我不知道我从查询中获得了多少过滤器,有没有办法在查询和设置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();
答案 0 :(得分:1)
知道了,我可以将连接分配给变量,然后循环并添加条件:
$query = Model::join('users_data','user.id','=','users_data.id');
foreach ( $conditions as $cond ) {
$query->where('...');
}
答案 1 :(得分:1)
那是真的。
如果您没有初始化Eloquent模型以将其分配给变量,例如:
$query = Model::join('users_data','user.id','=','users_data.id');
您可以使用 new 关键字对其进行实例化,如下所示:
$query = new Model;
然后循环并动态添加 where 语句。
以下是一个例子:
$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