web-dev-qa-db-ja.com

Laravel Eloquent Ignore Caseing

Eloquentを使用してクエリを実行しようとしていますが、$ vars ['language']は小文字ですが、language列は必ずしも小文字ではありません。雄弁な言葉を使用してこの検索を実行するにはどうすればよいですか?

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

私はこれを行う方法をどこにも見つけることができなくても、私がしたいのはこれです

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

両方が小文字になり、一致させることができます。

16
Lpc_dark

WhereRawを パラメータバインディング とともに使用して、whereRawステートメントをサニタイズします。

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

前の回答一部のデータベースでは、場所で演算子ilikeを使用できます。例えば

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

使用可能なすべての演算子は次のとおりです。

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

編集:ilikeは大文字と小文字を区別しませんlike

39
Margus Pala

this post によると、これを解決するdbに依存しない方法は次のようになります。

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