Я создаю простой каталог магазинов в Laravel 5.4. По сути, я хочу, чтобы в моей статье была кнопка, которая получала бы все статьи со связанными категориями (учитывая, что статья может иметь много категорий).
У меня есть модели Article и Category, а также сводная таблица article_category. Оба имеют отношение ко многим другим, как:
Код в артикуле модели:
public function categories()
{
return $this->belongsToMany('App\Category');
}
код модели категории:
public function articles()
{
return $this->belongsToMany('App\Article');
}
Моя проблема заключается в том, как получить список статей, включающих все статьи с категориями, относящимися к статье.
Это моя функция на контроллере прямо сейчас, он получает объект JSON со списком категорий:
public function showRelatedArticles($category)
{
// Decode JSON to PHP array
$category = json_decode($category);
$collection;
if(is_array($category)){
foreach ($category as $cat) {
$articles = Article::whereHas('Category', function ($query) {
$query->where('category_id', $cat->id);
})->get();
$collection = merge($articles);
}
} else {
dd('Not array');
}
return view('front', ['articles' => $collection]);
}
Это возвращает ошибку:
BadMethodCallException
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: Category ()
Возможно, у меня неправильный тип отношений между моими моделями, но это правильный метод объявления отношения «многие ко многим», не так ли?