【问题标题】:Join and Dynamic `Where` in Laravel4 Eloquent在 Laravel Eloquent 中加入和动态 `Where`
【发布时间】:2014-03-14 08:09:26
【问题描述】:

我正在构建一个需要在 3 个主表中执行搜索的搜索表单: 用户、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();

【问题讨论】:

    标签: php mysql laravel-4 eloquent


    【解决方案1】:

    知道了,我可以将连接分配到一个变量中,然后循环并添加条件:

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

    【讨论】:

      【解决方案2】:

      确实如此。

      如果你没有初始化 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-26
        • 2015-10-02
        • 1970-01-01
        • 2014-10-16
        • 2014-08-14
        • 2014-04-17
        • 2018-12-07
        相关资源
        最近更新 更多