Je veux obtenir tous les utilisateurs qui ont une ligne liée dans le tableau addresses
ou dans le tableau institutes
. En outre, je veux que modeIN
devrait être égale à MT
. Je pensais que la requête suivante ferait cela, mais il ne fonctionne pas:Laravel: orWhereHas() désactive où()?
$users = User::whereHas('addresses')
->orWhereHas('institutes')
->where('modeIN', '=', 'MT')
->get()
->pluck('modeIN');
dd($users);
Il y a encore les utilisateurs répertoriés où modeIN
ne correspond pas à MT
. Pourquoi cela se passe-t-il et comment puis-je le réparer?
Regardez la requête qui est effectivement généré, et AND et OR combinaisons que vous êtes en train de construire .... Je pense que vous trouverez qu'il est 'A ADRESSES OU (HAS INSTITUTS ET Modin = ' MT) ', plutôt que le' (A ADDRESSES OU A INSTITUTES) ET MODEIN = 'MT'' que vous attendiez –
@MarkBaker puisque je n'ai pas défini d'accolades il me semble comme 'A ADRESSES OU A INSTITUTES et modeIN = 'MT'. Quelle est la logique par défaut comment Laravel lit ceci? – Adam
L'utilisation d'un OU est de définir les accolades pour vous ..... regardez le SQL qui est généré pour exécuter la requête si vous ne me croyez pas –