laravel effectuer une recherche sur plusieurs mots séparés par des espaces
Je suis nouveau sur laravel générateur de requêtes, je veux effectuer une recherche sur plusieurs mots saisis dans un champ de saisie par exemple si je tape "jhon doe" je veux obtenir une colonne qui contient jhon ou doe
J'ai vu/essayé les solutions à l'aide de php, de MySQL, mais ne peut pas capables de s'adapter dans le générateur de requêtes
//1. exploding the space between the keywords
//2. using foreach apend the query together
$query = "select * from users where";
$keywordRaw = "jhon doe";
$keywords = explode(' ', $keywordRaw );
foreach ($keywords as $keyword){
$query.= " first_name LIKE '%" + $keyword +"%' OR ";
}
comment puis-je faire cela en utilisant le générateur de requêtes
c'est ce que j'ai à ce jour, quelle est la bonne façon de le faire,
$keywordRaw = "jhon doe";
//how do I explode this words and append them along with their appropriate query
$users = User::select('users.*')
->where('first_name', 'LIKE', '%'.$keywordRaw.'%')
s'il vous plaît aider, merci d'avance
OriginalL'auteur user4006175 | 2015-02-02
Vous devez vous connecter pour publier un commentaire.
C'est comment vous le faites avec
Query\Builder
, mais d'abord, quelques remarques supplémentaires:Cela dit, de toute évidence vous ne pouvez pas compter sur
explode
parce que, dans le cas ci-dessus, vous obtiendrez toutes les lignes.Donc, c'est ce que vous devez faire:
Il y a la fermeture dans le
where
parce que c'est une bonne pratique pour envelopper votreor where
clauses dans les parenthèses. Par exemple, si votreUser
modèle utiliséSoftDeletingScope
et vous ne feriez pas ce que j'ai suggéré, l'ensemble de votre requête serait foiré.OriginalL'auteur
Ce serait le travail.la où serait la recherche pour le prénom de mots-clés que vous avez entré.
whereIn
est explicite, c'est à dire=
, alors que l'OP veutlike %value%
, donc ce n'est pas le seul. Également double de l'espace ou d'une autre, les espaces dans la chaîne rend invalide.OriginalL'auteur
Essayer..
OriginalL'auteur
, Vous pouvez essayer comme suit
OriginalL'auteur
Avez-vous envisagé d'utiliser un index de texte intégral sur votre prenom de la colonne?
Vous pouvez créer cet index à l'aide d'un Laravel la migration, même si vous avez besoin d'utiliser une instruction SQL:
Vous pouvez ensuite exécuter assez avancée des recherches dans ce domaine, comme ceci:
Qui correspondent à des dossiers contenant les mots "john" ou "dupont"; à noter que cette approche match sur l'ensemble de mots, plutôt que de sous-chaînes (qui peut être le cas si vous utilisez COMME).
Si vous souhaitez rechercher les enregistrements contenant tous mots, vous devez faire précéder chaque mot-clé avec un signe"+", comme ceci:
Vous pouvez même trier par pertinence, même si c'est probablement excessif pour vos besoins (et non pertinente pour "tous" les recherches). Quelque chose comme ceci:
Il y a un bon article qui couvre cette approche générale ici:
http://www.hackingwithphp.com/9/3/18/advanced-text-searching-using-full-text-indexes
OriginalL'auteur
Vous pouvez utiliser ce package https://github.com/nicolaslopezj/searchable
ou tout simplement le faire, si vous ne souhaitez pas utiliser le package
OriginalL'auteur
À l'aide de 'orWhere', vous obtiendrez des résultats pour chaque mot clé, pas de résultats pour keyword1 + keyword2...Donc tout dépend de ce que vous cherchez
OriginalL'auteur