在 laravel 中查询的位置

Where In query in laravel

我正在尝试构建这个具有 where In 的查询。但是,当我 运行 它时,我得到了错误。

$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方法有什么问题?/

$regions 变量似乎不是数组(无法从您粘贴的代码中猜测)可能是 Illuminate\Support\Collection 或 Illuminate\Database\Eloquent\Collection

希望这对您有所帮助

在执行这段代码之前,您应该检查 $regions 是否是一个数组。当试图从数据库中获取数组但没有找到结果时,对象未初始化为数组。

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

$tickets->where('ticket_details.is_archived', '=', $archived ? '1' : '0');  

if($user->hasRole('ABM')) {
   if( count( $regions ) ) $tickets->whereIn('client_details.client_area', $regions);
}