Bonjour,

Voilà je me suis créé une fonction pour faire une recherche sur le nom, le prénom mais aussi les deux en même temps (John Doe)
la voici : (elle fonctionne comme il faut)

    private function getSearch(?string $keywords): ?string
    {
        $words = explode(' ', $keywords);
        $search = [];
        foreach ($words as $word) :
            $search[] =
                "(lastname REGEXP '[[:<:]]" . $word . "' OR
                    firstname REGEXP '[[:<:]]" . $word . "')";
        endforeach;
        $conditions = implode(' AND ', $search);
        $data = $conditions;
        return $data;
    }

Mais j'aimerais faire quelque chose de plus générique pour pouvoir faire des recherches sur d'autres page et d'autre champs, j'ai donc ajouté une fonction type pour choisir les champs, mais maintenant la recherche ne ce fait plus sur le nom et prénom en même temps (seulement le nom ou le prénom)

    public function type(?string $key = null)
    {
        $data = "lastname; firstname";
        return $this->getSearch($key, $data);
    }

    private function getSearch(?string $keywords, $type): ?string
    {
        $words = explode(' ', $keywords);
        $keyTypes = explode('; ', $type);
        $dbType = [];
        $search = [];
        foreach ($words as $word) :
            foreach ($keyTypes as $keyType) :
                $search[] = $keyType . " REGEXP '[[:<:]]" . $word . "'";
            endforeach;
            $dbType[] = '(' . implode(' OR ', $search) . ')';
        endforeach;
        $conditions = implode(' AND ', $dbType);
        $data = $conditions;
        return $data;
    }

Je suis à peu près sûr que le souci vient de mon implode OR, je pense qu'il ne prend pas en compte les parenthèses, j'ai essayé beaucoup de choses différentes mais rien n'y fait.
Si quelqu'un peu m'éclairer un petit peu sur mon erreur se serait super.

Merci

1 réponse


Bon je m'auto-résolu, en fait j'avais oublié le $key dans le foreach

            foreach ($keyTypes as $key => $keyType) :
                $search[$key] = $keyType . " REGEXP '[[:<:]]" . $word . "'";
            endforeach;

Je laisse le code si ça intéresse quelqu'un et si quelqu'un trouve une amélioration à apporter je suis preneur ;)