每篇文章属于许多类别。每个用户都有很多类别。 我想检索所有具有用户类别的文章。对于下面这些关系中的每一个,我都有自己的数据透视表。
article_cat
id | articleID |的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,但据我所知,它并不适用于多对多的关系。
目前(作为一种“解决方法”)我一直在使用它。我已经提取了一个用户类别列表,搜索了所有ID并提取相关文章并在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;
但是我认为它不会随着数据的增加而扩展(它已经产生了超过1k的查询,只有1000篇文章,加载时间超过8秒)。
有什么想法吗?
答案 0 :(得分:0)
您可以使用IN查询。或子查询。
Article::whereIn('id', $user->Categories::all->lists('id')->toArray() )
$category_id = $user->Categories::all->lists('id')->toArray();
Article::whereIn('id', function($query) use ($category_id){
$query->select('categories_id')
->from(with(new Category)->getTable())
->whereIn('category_id', $categoryID )
})->get();