Полиморфные связи нужны, когда одна модель может быть связана с несколькими другими моделями. Например: модель
"тег" может быть связана как с моделью
"статья", так и с моделью
"видео".
А у вас обычная связь many-to-many: у одного поста может быть сразу несколько категорий, а одна категория может содержать сразу несколько постов.
Идем в документацию Laravel (
https://laravel.com/docs/master/eloquent-relations... и делаем все как там описано:
// Article.php
class Article extends Model
{
// ...
public function categories()
{
return $this->belongsToMany('App\Category');
}
// ...
}
// Category.php
class Category extends Model
{
// ...
public function articles()
{
return $this->belongsToMany('App\Article');
}
// ...
}
Тогда таблицы в БД должны быть такие:
articles
- id
- title
- desc
categories
- id
- slug
- name
article_category
- id
- article_id
- category_id
Теперь, допустим, у вас есть список id тех категорий, на которые подписан пользователь (переменная
$subscribedOn). Тогда, получить все посты для ленты этого пользователя можно так:
$subscribedOn = [ 1, 2, 3 ]; // ID категорий, на которые подписан пользователь
$articlesForUser = Article::whereHas('categories', function(Builder $query) use ($subscribedOn) {
$query->whereIn( 'categories.id', $subscribedOn );
})->get();