2017-08-02 1 views
1

Ich habe eine Beziehung in meiner Benutzertabelle namens "Rollen".Laravel whereHat nicht wie erwartet funktioniert

Diese Beziehung ist:

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

ich nur versuchen, Benutzer zu holen, die eine Rolle von 3.

Meine Anfrage haben wird:

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

Dies ist jedoch zurückkehrt alle Benutzer unabhängig von ihrer Rolle. Ich kann bestätigen, dass alle Benutzer Rollen haben und die Rollenbeziehung funktioniert.

Die Felder in der Tabelle role_user sind ‚id‘, ‚user_id‘

+0

Sie müssen dies versuchen: '$ role_id = 3; Benutzer :: whereHas ('Rollen', Funktion ($ q) verwenden ($ role_id) { $ q-> wo ('id', $ role_id); }) -> get(); ' –

+0

@HirenGohel Siehe mein bearbeite und kommentiere meine Antwort gepostet. Dein Kommentar ist eine funktionierende Lösung, aber mein WhereHas war auch in seinem Zustand, aber der Rest des Codes hatte ein Problem. – Lovelock

+0

Sie meinen also, dass Ihre 'orWhere' Bedingung nicht richtig funktioniert ?? –

Antwort

0

Sieht aus wie dieses Problem durch eine vorherige orWhere-Klausel in der Abfrage verursacht wurde.

bei der ursprünglichen Abfrage in der Frage der Suche:

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

Dieser lautet wie, wo der Name ‚Namen‘ und der Benutzer hat Rollen und enthält eine Rolle 3. Die Abfrage auch in beliebigen Ergebnisse bringen wurde Das hatte eine E-Mail, die mit meiner E-Mail-Adresse übereinstimmte, aber weil es "oder" war, ignorierte es die anderen Anforderungen.

+0

Also, funktioniert mein Kommentar für dich ODER nicht? –

+0

Verwenden Sie den Bearbeitungslink zu Ihrer Frage, um weitere Informationen hinzuzufügen. Die Schaltfläche Post-Antwort sollte nur für vollständige Antworten auf die Frage verwendet werden. - [Aus Bewertung] (/ review/low-quality-posts/16908587) –

+0

Ohne ausführlich genug zu erklären, wie das Problem zu lösen ist, ist dieser Kommentar sinnlos. Stellen Sie sich vor, Sie erhalten diese Informationen als Antwort von einem anderen Benutzer; hätte es deine Frage beantwortet? Sicher, es könnte Ihnen einen Hinweis geben, wo Sie in Ihrem Code nachsehen können, aber niemand sonst kann es sehen. Wenn dies als Antwort auf diese Frage akzeptiert werden soll, wird die Frage ** unklar ** und fehlt ** genug Details, um angemessen zu beantworten **. Wenn Sie nur alle Details haben und diese nicht teilen, wie ist diese Frage hilfreich? Bitte bearbeiten und verbessern. –

Verwandte Themen