Я не могу ограничить поиск/отображение результатов на основе их категорий.
У меня отношения многие-ко-многим. В статье много категорий, а в категории много статей. Пользователь вводит адрес в форму и выбирает 1-3 категории. Затем я хочу сопоставить эти указанные пользователем категории со статьями из моей базы данных, которые имеют эти категории и отображают только эти конкретные статьи.
Я просматривал много вопросов SO, таких как ЭТОТ ОДИН, и, похоже, не могу заставить все работать. Моя основная ошибка заключается в том, что я получаю неопределенное свойство $categories.
До того, как я добавил материал категории, он работал, и я мог отображать список статей, которые находились на определенном расстоянии. Я использую Laravel 5.1.
Таблицы базы данных:
'articles'
(id, title и т.д.)
'categories'
(id, name)
'article_category'
(article_id, Category_id)
Вот мой код:
Модель статьи:
public function categories()
{
return $this->belongsToMany('App\Category')->withTimestamps();
}
public function getCategoryListAttribute()
{
return $this->categories->lists('id')->all();
}
Модель категории:
public function articles()
{
return $this->belongsToMany('App\Article')->withTimestamps();
}
Контроллер статей
public function index(Request $request)
{
$lat = $request->get('lat');
$lng = $request->get('lng');
$categoryChoice = $request->get('categoryList');
$distance = 1;
$query = Article::getByDistance($lat, $lng, $distance);
if(empty($query)) {
return redirect()->action('HomeController@index');
}
$ids = [];
//Extracts the alticle/store id's
foreach($query as $q)
{
array_push($ids, $q->id);
}
$results = DB::table('articles')
->whereIn( 'id', $ids)
->orderBy('title', 'DESC')
->paginate(6);
$articles = $results;
$categoryMatches = [];
foreach ($articles->categories as $category){
array_push($categoryMatches, $category->pivot->category_id);
}
$articles = $articles->whereIn($categoryMatches, $categoryChoice);
return view('articles.index', compact('categories', 'days'))->withArticles($articles);
}