2017-03-08 76 views
0

我的系統有用戶,職位和類別。是檢索許多通過多種口才

我的口才關係(省略倒數)如下:

用戶hasMany職位。 郵政belongsTo用戶。 發佈hasOne類別。

我想取回已使用由特定用戶即沿東西線的所有類別:

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

顯然,上述不工作,我只是把它放在那裏呈現理念。

謝謝你的幫助!

回答

1

假設你belongsTo關係類被命名爲類別你可以這樣做:

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

編輯

您可以將hasManyTrough關係添加到用戶模型,並且您將能夠訪問用戶的所有類別粗略的職位。加入用戶類:

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

然後你就可以使用它像這樣:

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

這將讓屬於該用戶的所有帖子的所有類別。 請注意,您的模型名稱空間可能不同。

+0

我試圖避免環路瞭解口才更好,因爲我有一個mysql的原料解決方案,我相信,一定有說服力的一個班輪,讓期望的結果 – jacobdo

+0

@jacobdo,請檢查我的編輯上面。 – TheFallen

0

使用嵌套whereHas()並約束來過濾特定用戶。

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