我有一个方法可以根据一些join
和where
子句返回省份列表。我遇到的问题是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();
}
感谢您的帮助。
答案 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');