Я пытался получить помощь по этому вопросу раньше, но я думаю, что люди либо неправильно истолковывают мой вопрос, либо не совсем понимают, чего я пытаюсь достичь, с Eloquent/Laravel.Laravel поиск по отношениям
У каждого пользователя есть много категорий. В каждой категории есть много статей. Я хочу получить все статьи из набора категорий, которые пользователь имеет.
Так что пользователь имеет категории 1, категории 2, я хочу, чтобы извлечь все статьи из категории 1 и категории 2.
Для каждого из этих belongsToMany отношений ниже, у меня есть свои собственные сводные таблицы.
артикул:
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 через, но, насколько я могу судить, он не работает со многими и многими отношениями.
В настоящее время (как своего рода «работа вокруг») Я использовал это. Я придвинул список категорий пользователя и поиск по всем идентификаторам и вытягивать соответствующую статью и формирование коллекции из него в 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 секунд).
Любые идеи?
Просто интересно, почему вы делаете себя: находите? Вместо того, чтобы вводить экземпляр модели пользователя? –