在Laravel4 Eloquent中加入和动态`Where`

时间:2014-03-14 08:09:26

标签: php mysql laravel-4 eloquent

我正构建一个需要在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();

2 个答案:

答案 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