2017-08-02 16 views
1

私のUserテーブルには「roles」という関係があります。Laravel where期待どおりに動作していません

この関係は次のとおりです。

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テーブルのフィールドは、この問題は、クエリの前のorWhere句によって引き起こされたよう

+0

これを試す必要があります: '$ role_id = 3; User :: whereHas( 'role'、function($ q)use($ role_id){ $ q->ここで( 'id'、$ role_id); }) - > get(); ' –

+0

@HirenGohel私の答えを編集してコメントを投稿しました。あなたのコメントは実用的な解決策ですが、私のwhereHasもその州で働いていましたが、残りのコードには問題がありました。 – Lovelock

+0

あなたはあなたの 'orWhere'条件が正しく機能していないと言っていますか? –

答えて

0

が見える「ID」、「USER_ID」です。名前は「名前」であり、ユーザがクエリがまたどんな結果に持ち込むた役割を持っており、3の役割を含む場合、これは読み込み

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

:問題の元のクエリを見てみると

私の提供した電子メールと一致する電子メールを持っていましたが、それは 'orWhere'なので他の要件は無視されました。

+0

私のコメントはあなたのために働くのですか? –

+0

追加の情報を追加するには、あなたの質問に編集リンクを使用してください。回答を投稿するボタンは、質問に対する完全な回答のためだけに使用してください。 - [レビューの投稿](レビュー/低品質の投稿/ 16908587) –

+0

問題解決の方法を説明するための十分な説明はありませんが、この解説は無意味です。この情報を他のユーザーからの回答として取得すると想像してください。 **あなたの質問に答えてくれましたか?確かに、それはあなたのコードを見るためのヒントを与えるかもしれませんが、誰もそれを見ることはできません。これがその質問の答えとして受け入れられるならば、質問は**不明確**になり、**十分に詳細には答えられません**。すべての詳細があり、それらを共有していない場合、このQ&Aはどのように役立ちますか?編集して改善してください。 –

関連する問題