我正在尝试构建此查询,其中包含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方法有什么问题?/
答案 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);
}
}