J'ai des difficultés à gérer des mots-clés multiples et à interroger la base de données en fonction de la pertinence. Je veux effectuer une recherche dans chaque ligne et, s'il y a plus d'un mot clé par ligne qui correspond à mes colonnes sélectionnées, trier ces entrées en premier.
J'ai quelque chose qui fonctionne, mais il s'agit simplement de tirer toutes les entrées avec un mot-clé présent dans une colonne, sans ordre spécifique ou pertinence.
Prenez cet exemple concret :
$search_terms = array('York', 'North Yorkshire');
$properties = Property::where(function ($q) use ($search_terms) {
foreach ($search_terms as $value) {
$q->orWhere('address1', 'like', "%{$value}%");
$q->orWhere('address2', 'like', "%{$value}%");
$q->orWhere('postcode', 'like', "%{$value}%");
$q->orWhere('city_town', 'like', "%{$value}%");
$q->orWhere('county', 'like', "%{$value}%");
}
})->paginate(25);
Cela fonctionne et permet d'extraire toutes les entrées dont les mots-clés sont présents dans l'une des colonnes sélectionnées. Dans ce cas York de la city_town
et North Yorkshire de la county
colonne.
J'ai besoin que la requête vérifie chaque rangée individuelle pour ces mots-clés et ramène les entrées dans lesquelles TOUTES de ces mots-clés sont présents, suivi par où un ou plusieurs sont présents ensuite (mon exemple fait cela maintenant).
Merci d'avance à toute personne susceptible de m'aider.