2017-08-02 34 views
1

我在我的用戶表上有一個叫'角色'的關係。Laravel哪裏沒有按預期工作

這種關係是:

public function roles() 
{ 
    return $this->hasMany('App\RoleUser'); 
} 

我只是想獲取有3

我查詢的角色的用戶是:

User::where('name', $name) 
    ->orWhere('email', $email) 
    ->whereHas('roles', function ($q) { 
     $q->where('id', 3); 
    })->get(); 

然而,這將返回所有用戶不管他們的角色如何。我可以確認所有用戶都具有角色並且角色關係正在工作。

在ROLE_USER表中的字段是「身份證」,「USER_ID」

+0

你必須試試這個:'$ role_id = 3; User :: whereHas('roles',function($ q)use($ role_id){ $ q-> where('id',$ role_id); }) - > get();' –

+0

@HirenGohel查看我的編輯並評論我發佈的答案。您的評論是一個可行的解決方案,但我的whereHas也在其狀態下工作,但其餘代碼有問題。 – Lovelock

+0

所以你的意思是說你的'orWhere'條件不能正常工作? –

回答

0

貌似這個問題是通過在查詢之前orWhere條款引起的。

綜觀問題的原始查詢:

User::where('name', $name) 
    ->orWhere('email', $email) 
    ->whereHas('roles', function ($q) { 
     $q->where('id', 3); 
    })->get(); 

這讀取爲其中的名稱是「名」和用戶角色和包括3角色的查詢也帶來任何結果那裏有一封與我提供的電子郵件相匹配的電子郵件,但因爲它是'或'它忽略了其他要求。

+0

那麼,我的評論是否適合你? –

+0

請使用您問題上的編輯鏈接添加更多信息。後回答按鈕應該只用於問題的完整答案。 - [來自評論](/ review/low-quality-posts/16908587) –

+0

沒有提供足夠的細節來解釋如何解決問題,這個評論是毫無意義的。想象一下,自己從另一個用戶那裏獲取這些信息作爲答案;它會有**回答你的問題嗎?當然,它可能會給你一個提示,看看你的代碼,但沒有人能看到它。如果這個問題被接受爲這個問題的答案,那麼問題就會變得不清楚**並且缺乏足夠的細節來充分回答**。如果只有你有所有的細節,並沒有分享他們,那麼這個問答有什麼用?請編輯和改進。 –