2017-02-11 199 views
-1

每篇文章屬於很多類別。每個用戶都有很多類別。 我想檢索具有用戶類別的所有文章。對於以下每種關係,我都有自己的數據透視表。關係有多對多關係

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

任何這進一步幫助?下面的答案沒有幫助 – user5067291

回答

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(); 
+0

我可以在這裏是愚蠢的,但$用戶>類別::所有返回不正確的訪問靜態方法的錯誤,而且其中未啓用的方法在文章中發現 – user5067291