2017-10-03 5 views
0

Je suis en train de construire un outil de filtrage simple, qui permet aux utilisateurs de filtrer les profils par différents états américains (Arizona, Alabama, et ainsi de suite)Recherche de plusieurs préfixes dans une colonne par Eloquent utilisant l'expression rationnelle

Je J'utilise le nom à deux caractères de l'état pour les identifier en interne. Un profil a un champ appelé "linear_coverage", qui est une chaîne implosée de State + County dans laquelle le profil est activé.

Par exemple, un profil pourrait avoir les éléments suivants "linear_coverage"

NY_Cattaraugus,NY_Chautauqua,NY_Erie,NY_Genesee,NY_Niagara,NY_Wyoming,NY_Cattaraugus,NY_Chautauqua,NY_Erie,NY_Genesee,NY_Niagara,NY_Wyoming,NY_Erie,NY_Niagara,NY_Erie,NY_Niagara,AK_Kodiak Island,AK_Skagway 

Vous pouvez voir cette personne a New York (NY) et plusieurs comtés choisis, mais il a aussi l'Alaska (AK).

J'ai essayé d'utiliser ce qui suit:

foreach($states as $state) 
    $query->orWhere('linear_coverages', 'LIKE', '%' . strtoupper($state) . '_%'); 
    //$query->orWhere('linear_coverages', 'regexp', strtoupper($state) . "_[A-z]+"); 

La deuxième ligne de commentaire est un test que je courais, sans avoir le succès. Je pense, est-il de toute façon pour un RegEx pour rechercher des préfixes multiples dans une chaîne? Donc je pourrais chercher [NY_, AK_] et cela me retournerait le profil que je viens de montrer, et l'autre qui répond aux critères.

Merci beaucoup. M.

Répondre

0

finalement trouvé à la façon d'y parvenir

J'ai remplacé par le Regexp

suivant
/(NY|AZ)_[A-z]+/ 

En enfermant les différents états et en les séparant par | symbole, le Regex va essayer de trouver l'un de ces préfixes, et la chaîne restante est valide.

J'ai été capable de filtrer tous mes résultats correctement. : D