web-dev-qa-db-fra.com

Laravel Éloquent Ignorer le boîtier

J'essaie d'exécuter une requête en utilisant Eloquent $ vars ['langue'] est en minuscules mais la colonne de langue n'est pas nécessairement en minuscules. Comment puis-je faire cette recherche en utilisant éloquent mais avoir toujours les minuscules dans la requête

Item::where('language', $vars['language'])

Ce que je veux faire c'est ça même si je ne trouve nulle part comment faire ça

Item::where('LOWER(language)', $vars['language'])

afin qu'ils soient tous les deux en minuscules et que je puisse les faire correspondre.

16
Lpc_dark

Utilisez whereRaw avec paramètre binding pour assainir votre instruction whereRaw:

$term = strtolower($vars['language']);
Item::whereRaw('lower(language) like (?)',["%{$term}%"])->get();

Réponse précédente Dans certaines bases de données, vous pouvez utiliser l'opérateur ilike dans votre where. Par exemple

Item::where('language', 'ilike', $vars['language'])->get();

Tous les opérateurs disponibles sont:

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
);

Modifier: ilike ne respecte pas la casse like.

39
Margus Pala

Selon cet article , un moyen indépendant de la base de données pour résoudre ce problème serait:

Item::whereRaw('LOWER(language) = ?', [$vars['language']])->get();
13
igorsantos07