Мне сложно понять условие подсчета отношений в WhereHas. На странице документации это не обсуждается, но об этом говорится на странице API. Цитата из API.
Builder | Builder whereHas (строка $ отношение, Closure $ callback, строка $ operator = '> =', int $ count = 1)
Добавьте в запрос условие подсчета отношений с помощью предложений where.
Пример
Модель Resource
имеет отношение "многие ко многим" с ResourceCategory
public function categories()
{
return $this->belongsToMany('ResourceCategory', 'resource_category_mapping');
}
Условие родства в Has
Условие связи в Has работает должным образом.
Resource::has('categories', '>', 1)->get()
//this return all resources which have more than one catgories
Условие взаимоотношений в WhereHas
Условие отношений в WhereHas работает не так, как ожидалось. Я уверен, что неправильно это понял.
Resource::whereHas('categories', function ( $query){
$query->whereIn('resource_category_id', [1, 2, 4]);
}, '>', 1)->get()
Приведенный выше код должен возвращать ресурсы, категории которых принадлежат одной из [1, 2, 4], а ресурс имеет более одной категории. Но это не так.
Вопрос
Пожалуйста, объясните состояние отношений в WhereHas, может быть, приведение примера будет очень полезным.