У меня возникли проблемы с следующим фрагментом кода на моем контроллере:Призыва к неопределенным метод Осветите Database Eloquent Коллекция :: whereHas() в Laravel
$opportunity_date = $oppr_arr->opportunity_date;
$locations_array_result = explode(",",$locations_array_result);
$usersCount = User::where('activated', '=', 1)
->where('group_id', '=', 1)
->where('availability_date', '<=', $opportunity_date)
->get();
foreach ($locations_array_result as $param) {
$usersCount = $usersCount->whereHas('desiredLocation', function ($q) use($param) {
$q->where('location_id', '=', $param);
});
}
$usersCount = $usersCount->count();
Когда я запускаю его, он дает мне следующее сообщение об ошибке:
Call to undefined method Illuminate\Database\Eloquent\Collection::whereHas()
Я мои отношения настроить так:
пользователя Модель
public function desiredLocation() {
return $this->belongsToMany('Location', 'user_desired_location');
}
Расположение Модель
class Location extends \Eloquent {
protected $table = 'locations';
protected $fillable = array('name');
public function country() {
return $this->belongsTo('Country');
}
}
А структура базы данных для user_desired_location
таблицы:
- id
- user_id
- location_id
Выполняется запрос, когда вы вызываете метод get() 'QueryBuilder в вашем контроллере. Это означает, что '$ usersCount' имеет тип' Collection', что означает, в свою очередь, вы не можете называть 'whereHas' на нем (' whereHas' - метод QueryBuilder). Я не совсем понимаю, что вы пытаетесь сделать, но вам нужно изменить свой код :( – edpaez
Возможный дубликат [Вызов функции-члена whereHas() для не-объекта в laravel] (http: // stackoverflow .com/вопросы/26994459/призыв к а-члена-функции-wherehas-на-не-объект-в-Laravel) – bcmcfc