Sélectionnez un utilisateur
@foreach ($Query as $selectedUser)
Code formatting<p> {{ $selectedUser->username}}</p>
@endforeach
Donc, en anglais, recherchez un nom d'utilisateur où id n'est pas égal à l'ID utilisateur actuellement connecté et où la colonne valeur1 de l'utilisateur authentifié est égale à la valeur1 ou à la valeur2 d'un autre utilisateur ou value 3column
Voici une déclaration, j'ai fait ce qui ne fonctionne pas correctement mais cela fonctionne sans l'opérateur OR
$Query = DB::table('users')
->select('username')
->where('id', '!=', Auth::user()->id)
->whereIn(Auth::user()->recommendationWord1 , '=', 'value1', '||' , 'value2', '||' , 'value3'
->get();
cette déclaration est une exemple du format et contient ce que j'ai essayé.
where(Auth::user()->recommendationWord1, '=' , 'value1')
Voici le code de ma page HTML et comment je la poste
where id =! Auth::user->id // this prevents the query returning the current user logged in where Auth::user->value1 ,'=', 'value1' || 'value2' || 'value3'
3 Réponses :
où dans la structure est -> whereIn ('attribut', ['val1', 'val2', ...])
Dans votre cas
DB::table('users')
->select('username')
->where('id', '!=', Auth::user()->id)
->whereIn(Auth::user()->recommendationWord1 , ['value1', 'value2', 'value3'])
->get();
Voici le message d'erreur, Colonne introuvable: 1054 Colonne inconnue 'test1' dans 'clause where' (SQL: sélectionnez username parmi utilisateurs où id code >! = 7 et test1 dans (valeur1, valeur2, valeur3)). Auth :: user () -> recommendationWord1 renvoie test1 qui est correct car c'est ce qui est stocké dans ce champ
Il semble ne pas être retourné ou obtenir les valeurs du champ value1, value2 et value3
L'argument @John doit être le nom de la colonne et non la valeur. C'est à dire. 'recommendationWord1' au lieu de Auth :: user () -> recommendationWord1 .
Avez-vous essayé le paramètre de regroupement?
select * from users where name = 'John' and (votes > 100 or title = 'Admin')
Consultez l'exemple de la documentation:
Parfois, vous devrez peut-être créer des clauses where plus avancées telles que Clauses "where exists" ou regroupements de paramètres imbriqués. Le générateur de requêtes Laravel peut également les gérer. Pour commencer, examinons un exemple de contraintes de regroupement entre parenthèses:
DB::table('users')
->where('name', '=', 'John')
->where(function ($query) {
$query->where('votes', '>', 100)
->orWhere('title', '=', 'Admin');
})
->get();
enter code here
Comme vous pouvez le voir, passer une fermeture dans la méthode where indique le générateur de requêtes pour commencer un groupe de contraintes. La fermeture recevra une instance de générateur de requête que vous pouvez utiliser pour définir les contraintes qui doivent être contenues dans le groupe de parenthèses. L'exemple ci-dessus produira le SQL suivant:
$Query = DB::table('users')
->select('username')
->where('id', '!=', Auth::user()->id)
->where(function($query){
$query->where(Auth::user()->recommendationWord1, '=', 'value1')
->orWhere(Auth::user()->recommendationWord1, '=', 'value2')
->orWhere(Auth::user()->recommendationWord1, '=', 'value3');
})
->get();
oui ça a l'air très bien, ça a l'air très soigné. Cependant, la principale chose que je recherche est essentiellement au lieu de faire Auth :: user () -> recommendationWord1 = word1, word2, word3, et ainsi de suite à plusieurs reprises
Si vous regardez la réponse @Davit ci-dessous, cela le montre clairement mais ne fonctionne pas correctement
laissez-moi savoir si cela a fonctionné. Je ne sais pas si vous l'avez vu, j'ai modifié ma réponse avec votre requête solution possible
oui cette solution fonctionne mais je voudrais qu'elle soit raccourcie, c'est mon problème maintenant. donc comme 1 ouWhere instruction serait génial mais ne répétant pas Auth :: user part
Je ne sais pas si cela peut être réalisé ... au moins je ne le sais pas ... et si vous avez essayé de combiner ma solution avec la solution de @Davit? en utilisant whereIn au lieu de orWhere
Essayez ceci:
$users = User
::where('id', '<>', auth()->id())
->whereIn(auth()->user()->recommendationWord1, ['value1', 'value2', 'value3'])
->get()
"whereIn" array: 3 [▼ 0 => "test1" 1 => "=" 2 => array: 3 [▼ 0 => "word1" 1 => "word2" 2 => "word3"]]
C'est la sortie de cette déclaration, semble ne pas obtenir word1 ou dans l'exemple que j'ai donné value1 etc.
Comment est-ce une sortie de ces phrases? qu'avez-vous dd () pour obtenir ce résultat?
Non désolé, je voulais dire que c'était dans la sortie de la console de message d'erreur, mon mauvais.
Je posterai dans ma réponse comment je la sortirai
Vérifiez ici .
recommendationWord1est-il le nom de la colonne?@Tpojka oui c'est une colonne avec la table Users
Ensuite, ce que @Davit vous a laissé avec le changement:
'recommendationWord1'au lieu deAuth :: user () -> recommendationWord1. Le premier argument de la méthodewhereIn ($ nom_colonne, $ tableau)est le nom de la colonne par rapport à laquelle vous voulez vérifier les valeurs du tableau. Consultez les documents.ok, aussi $ array qui contient les noms de colonnes, vérifiant simplement que vous le savez, je ne fais que comparer les colonnes et trouver celles qui sont identiques