Каждая статья относится ко многим категориям. У каждого пользователя есть много категорий. Я хочу получить все статьи, в которых есть категории пользователей. Для каждого из этих отношений ниже у меня есть своя сводная таблица.Отношения HasManyThrough with Many to Many
article_cat
ID | Статьи | categoryId
users_cats
ID | user_details_id | categories_id
Отношения.
Articles.php
public function categories()
{
return $this->belongsToMany('App\Categories', 'article_categories', 'articleID', 'categoryID');
}
UserDetails.php
public function Categories(){
return $this->belongsToMany('App\Categories', 'users_cats', 'user_details_id', 'categories_id');
}
categories.php
public function articles(){
return $this->belongsToMany('App\Article', 'article_categories', 'categoryID', 'articleID');
}
public function UserDetails(){
return $this->HasMany('App\UserDetails', 'users_cats', 'user_details_id', 'categories_id');
}
Я попытался насколько мне известно, использовать HasMany, но он не работает со многими и многими отношениями.
В настоящее время (как своего рода «работа вокруг») Я использовал это. Ive придвинул список категорий пользователя и поиск по всем идентификаторам и вытягивать соответствующую статью и формирование коллекции из него в UserDetails.php
$user = self::find($this->id);
$user = $user->Categories;
foreach ($user as $item) {
foreach ($item->articles as $article)
$article1[] = Article::find($article->id);
}
$articles = collect($article1)->sortByDesc('date')->unique();
return $articles;
Однако я не думаю, что это будет хорошо масштабироваться с ростом данных (его уже производят более 1 тыс. запросов с 1000 статьями, загрузка которых занимает 8 секунд).
Любые идеи?
Дальнейшая помощь в этом вопросе? Следующий ответ не помог – user5067291