在laravel中查询的位置

时间:2015-06-30 14:55:50

标签: php laravel laravel-5 query-builder

我正在尝试构建此查询,其中包含where。但是,当我运行它时,我收到错误。

$tickets =  DB::table('ticket_details')
                ->join('client_details', 'client_details.client_id', '=', 'ticket_details.client_id')
                ->select();

               if($archived){
                   $tickets->where('ticket_details.is_archived', '=', '1');
                } else {
                   $tickets->where('ticket_details.is_archived', '=', '0');
                }
                if($user->hasRole('ABM')) {
                    $tickets->whereIn('client_details.client_area', $regions);
                }

但是这个查询给了我这个错误:

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, object given, called in 
/Applications/XAMPP/xamppfiles/htdocs/levigo/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 313 and defined

这里的whereIn方法有什么问题?/

2 个答案:

答案 0 :(得分:0)

看来$ regions变量不是一个数组(不能从您粘贴的代码中猜出)也许是Illuminate \ Support \ Collection或Illuminate \ Database \ Eloquent \ Collection

希望这会有所帮助

答案 1 :(得分:0)

在执行此代码之前,您应该检查$ regions是否为数组。尝试从数据库中获取数组但未找到结果时,该对象不会初始化为数组。

   $tickets =  DB::table('ticket_details')
                  ->join('client_details', 'client_details.client_id', '=','ticket_details.client_id')
                  ->select();

   if($archived){

      $tickets->where('ticket_details.is_archived', '=', '1');  

   } else {

      $tickets->where('ticket_details.is_archived', '=', '0');

   }

   if($user->hasRole('ABM')) {

      if( count( $regions ) ){ 

         $tickets->whereIn('client_details.client_area', $regions);
      }
   }