J'ai la requête suivante (par souci de brièveté):
$employees = Employee::where('first_name', 'LIKE', "%$query%")
->orWhere('last_name', 'LIKE', "%$query%")
Maintenant, cela fonctionne lorsque l'utilisateur saisit un seul nom comme «John» ou «Smith», mais lorsqu'il saisit «John Smith 'il ne trouve rien. Est-ce que je manque un extra ou où?
3 Réponses :
Vous devrez ajouter un troisième ouWhere . Pour notre fonction de recherche, nous utilisons quelque chose comme ceci:
Employee::whereraw("COALESCE(last_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(first_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(last_name + ', ' + first_name, '') LIKE '%$query%'")
L'ajout de Coalesce a semblé aider à résoudre certains problèmes que nous avons rencontrés lors de sa première implémentation, mais je ne sais pas si cela est nécessaire dans votre cas.
Essayez ceci:
Employee::where(DB::raw('CONCAT(first_name," ",lastname)'), 'LIKE', "%' . $query . '%"))
Merci! Ils fonctionnent tous mais celui-ci est le plus court!
Attention: la réponse est grande ouverte pour l'injection SQL. laravel.com/docs/5.7/queries#raw-expressions
Vous pouvez faire:
$ fullName = trim ($ query);
$employees = Employee::where(DB::raw("CONCAT(first_name, ' ', last_name)"), 'LIKE', "%".$fullName."%")->get();
Vous concaténez les valeurs de la base de données pour first_name + '' + last_name , puis en utilisant like pour trouver les enregistrements correspondants.
Attention: la réponse est grande ouverte pour l'injection SQL. laravel.com/docs/5.7/queries#raw-expressions
@MuratTutumlu pas vraiment, le DB :: raw est utilisé dans la concaténation de colonnes où aucune variable définie n'est passée. et la chaîne de requête est passée dans l'argument where () qui est sans danger pour les injections.