2015-12-06 2 views
0

Я не могу ограничивать свой поиск/показывать мои результаты в зависимости от их категорий.Как отображать статьи с определенными категориями, соответствующими входной форме формы - Laravel

У меня есть много разных отношений. Статья содержит много категорий, и в категории есть много статей. Пользователь вводит адрес в форму и выбирает 1-3 категории. Затем я хочу сопоставить указанные категории пользователей со статьями из моего db, которые имеют эти категории, и отображать только эти конкретные статьи.

Я смотрел на многие вопросы, такие как THIS ONE и, похоже, не может заставить работать. Моя основная ошибка заключается в том, что я получаю неопределенное свойство $ категорий.

Прежде чем я добавил материал категории, он работал, и я мог отображать список статей, находящихся на определенном расстоянии. Я использую Laravel 5.1.

Таблица базы данных: 'статьи' (идентификатор, название, и т.д ...) (номер, имя) 'Категория' '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'); 
<--! THIS GETS THE USER DEFINED CATEGORY CHOICES --> 
    $categoryChoice = $request->get('categoryList'); 
    $distance = 1; 

    $query = Article::getByDistance($lat, $lng, $distance); 

     if(empty($query)) { 
     return redirect()->action('[email protected]'); 
     } 

     $ids = []; 

     //Extracts the alticle/store id's 
     foreach($query as $q) 
     { 
      array_push($ids, $q->id); 
     } 

<--! Get the listings that match the returned ids --> 
     $results = DB::table('articles') 
     ->whereIn('id', $ids) 
     ->orderBy('title', 'DESC') 
     ->paginate(6); 

     $articles = $results; 

<--! THIS IS TO GET CATEGORY IDS OF NEARBY STORES - NOT WORKING -> 
     $categoryMatches = []; 

     foreach ($articles->categories as $category){ 

      array_push($categoryMatches, $category->pivot->category_id); 

     } 

<--! THIS WILL IDENTIFY WHETHER THE CATEGORIES OF NEARBY STORES MATCH THE CATEGORIES CHOSEN IN THE FORM - NOT WORKING --> 
     $articles = $articles->whereIn($categoryMatches, $categoryChoice); 

     return view('articles.index', compact('categories', 'days'))->withArticles($articles); 

    } 

ответ

0

Ваш запрос возвращает Сборник статей. Вам нужно сначала перебирать статьи, потому что в каждой статье есть много категорий.

foreach ($articles as $article){ 

    //get the article's categories ids 
    $article->categories->lists('id'); 

} 
+0

Спасибо. В какой момент это произойдет? Я все еще получаю «Неопределенное свойство: stdClass :: $ categories», когда я его использую. –

Смежные вопросы