2017-03-08 13 views
0

私のシステムには、ユーザー、投稿、カテゴリがあります。以下のように(逆行列を省略)多くを介して多くのEloquentを取得する

私の雄弁な関係は以下のとおりです。

ユーザーhasMany投稿。 投稿belongsToユーザー。 投稿hasOneカテゴリ。

私は、特定のユーザー、すなわちの線に沿って何かで使用されているすべてのカテゴリー取得したいと思います:上記は動作しません、私は単に提示するが、それを入れて、明らかに

$categories = Category->with('posts') 
->has('post') 
->where('user_id' => $user->id) 
->get(); 

をアイディア。

ありがとうございました!

$user->load('posts.category'); 
$user->posts->each(function ($post) { 
    $post->category->id; 
}); 

EDIT

あなたはユーザーhasManyTrough関係を追加することができます。カテゴリであなたのポストbelongsTo関係がカテゴリ命名され、あなたがこれを行うことができますと仮定

答えて

1

モデルを使用すると、ユーザーのすべてのカテゴリにアクセスできます投稿を荒くする。 ユーザークラスに追加:

public function categories() 
{ 
    return $this->hasManyThrough('App\Category', 'App\Posts'); 
} 

そして、あなたはこのようにそれを使用することができます。これは、このユーザーに属するすべての記事のすべてのカテゴリを取得します

$user->load('categories'); 
$categories = $user->categories; 

。 モデルネームスペースは異なる場合があります。

+0

は、私は、望ましい結果に – jacobdo

+0

@jacobdoを与える雄弁ワンライナーがなければならないと確信していてください上記の私の編集をチェックしてください。 – TheFallen

0

ネストされたwhereHas()を使用して、特定のユーザーをフィルタ処理するように制約します。

$categories=Category::whereHas('post.user', function($q) use($id) 
{ 
    $q->where('id',$id); //constrain on user 
})->get(); 
関連する問題