错误:调用未定义的方法Illuminate \ Database \ Query \ JoinClause :: whereIn()

时间:2015-05-05 13:46:41

标签: php mysql sql laravel eloquent

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

    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

目前,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');