Как отображать статьи с определенными категориями, которые соответствуют вводу в форме — LaravelPhp

Кемеровские программисты php общаются здесь
Anonymous
Как отображать статьи с определенными категориями, которые соответствуют вводу в форме — Laravel

Сообщение Anonymous »

Я не могу ограничить поиск/отображение результатов на основе их категорий.

У меня отношения многие-ко-многим. В статье много категорий, а в категории много статей. Пользователь вводит адрес в форму и выбирает 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);

}

Вернуться в «Php»