【问题标题】:Where In query in laravel在 laravel 中查询的位置
【发布时间】:2015-09-17 10:54:27
【问题描述】:

我正在尝试构建具有 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);
                }

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

传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定对象,在
/Applications/XAMPP/xamppfiles/htdocs/levigo/vendor/laravel/framework/src/Illuminate/ 中调用Database/Query/Grammars/Grammar.php 在第 313 行并定义

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

【问题讨论】:

  • $regions 在哪里定义?如果是 laravel 集合对象(很有可能),那么尝试使用$regions->toArray()

标签: php laravel laravel-5 query-builder


【解决方案1】:

在执行此代码之前,您应该检查 $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);
}

【讨论】:

    【解决方案2】:

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2018-08-30
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2017-03-27
      • 1970-01-01
      相关资源
      最近更新 更多