【问题标题】:ERROR : Call to undefined method Illuminate\Database\Query\JoinClause::whereIn()错误:调用未定义的方法 Illuminate\Database\Query\JoinClause::whereIn()
【发布时间】:2015-05-05 13:46:40
【问题描述】:

我有一个方法可以根据joinwhere 子句返回省份列表。我遇到的问题是laravel 抛出一个异常,告诉有一个名为whereIn 的未定义方法。但是Eloquent 中存在whereIn 方法。我应该如何在连接上使用whereIn 方法?

public static function getProvinces($IDs = array()){
        $query =
            DB::Table('doctors')
            ->join('users',  function($join){
                $join->on('users.id', '=', 'doctors.user_id')
                    ->whereIn('users.status_id', array(3,4,7));

            })
            ->join('contacts',  function($join){
                $join->on('doctors.id', '=', 'contacts.doctor_id')
                    ->where('contacts.type_id', '=', 1);

            })
            ->join('provinces', 'contacts.province_id', '=', 'provinces.id')
            ->select('contacts.province_id as id','provinces.name as name',DB::raw("COUNT('contacts.province_id') as count"))
            ->groupBy('contacts.province_id');
        if(!empty($IDs))
            $query->whereIn('doctors.id', $IDs);
        return $query->get();

    }

感谢您的帮助。

【问题讨论】:

标签: php mysql sql laravel eloquent


【解决方案1】:

目前,JoinClause 不支持 whereIn 方法,但可以通过以下方式覆盖:

$query =
    DB::Table('doctors')
    ->join('users',  function($join){
        $join->on('users.id', '=', 'doctors.user_id')
            ->where('users.status_id', '=', 3)
            ->orWhere('users.status_id', '=', 4)
            ->orWhere('users.status_id', '=', 5);
    })
    ->join('contacts',  function($join){
        $join->on('doctors.id', '=', 'contacts.doctor_id')
            ->where('contacts.type_id', '=', 1);

    })
    ->join('provinces', 'contacts.province_id', '=', 'provinces.id')
    ->select('contacts.province_id as id','provinces.name as name',DB::raw("COUNT('contacts.province_id') as count"))
    ->groupBy('contacts.province_id');

【讨论】:

  • 将其放入查询的“全局”where-clause 中可能会更容易,例如DB::table(..)->join(..)->whereIn('users.status_id', [3,4,7])->where('contacts.type_id', 1)->select(...);
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2020-01-04
  • 2018-10-03
  • 1970-01-01
  • 2019-04-02
  • 2016-11-25
  • 2017-07-19
相关资源
最近更新 更多