2017-02-11 8 views
-1

各記事は多くのカテゴリに属しています。各ユーザーには多くのカテゴリがあります。 ユーザーのカテゴリを持つすべての記事を取得したいと考えています。以下の関係のそれぞれについて、私は自分のピボットテーブルを持っています。関係Ha​​sManyThroughと多対多の関係

記事_cat

id |記事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を使用することができますが、それは私が知る限り、多対多の関係では機能しません。

現在、(「回避」の一種として)これを使用しています。アイブ氏は、ユーザーのカテゴリのリストをプルアップし、私はそれが増加データとよくスケーリングするとは思わないが、IDSのすべてを検索し、関連する記事を引っ張り、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,000件以上の記事を1k以上のクエリで作成しており、ロードに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

私はここでばかげているかもしれませんが、$ user-> Categories :: allはエラーを返す静的メソッドへの不正なアクセス、またwhereInメソッドが記事に見つかりません – user5067291