私はL5.2とMySQL 5.7を使用しています。私は、DBの私のメタ欄に以下のJSONを持っている:Laravel JSON where句の大文字と小文字を区別しません
{"cellphone": "(687) 638-4512 x22934", "last_name": "Bashirian", "first_name": "Fidel"}
私は、文字列を大文字または小文字であるかどうかを実行するには、次のクエリを取得しようとしています:
User::where('meta->first_name', 'fidel');
私のようなものを試してみました:
User::whereRaw('LOWER(meta->"$.first_name") = ?', ['fidel']);
しかしnullが返されます。どのようにこれを行うには任意のアイデア!?
また、「fidel bashirian」などのフルネームでクエリを実行できるようにしたいと考えました。私はconcat()
と試みたが、私はそれがJSON列タイプで動作するかどうかわからないので、私はそれは、以下の機能と連携すること終わった:
protected function name($name)
{
$name = explode(' ', $name);
foreach ($name as $key => $value) {
$name[$key] = '%' . strtolower($value) . '%';
$this->builder->where(function ($query) use ($name, $key) {
$query->whereRaw('LOWER(meta->"$.first_name") like ?', [$name[$key]]);
$query->orWhereRaw('LOWER(meta->"$.last_name") like ?', [$name[$key]]);
});
}
return $this->builder;
}
以前の方法の照会でfidel
、Fidel
、FIDEL
、fidel bashirian
により、すべての結果が得られます。部分的な名字であっても。
あなたの答えはJSON列の型には当てはまりません。この場合 'fidel'の値は大文字と小文字が区別されるため、結果は返されません。 – enriqg9
カラムからfirst_nameの値を取り出すことができる方が良いでしょう。 – user6288916
更新された投稿を、私が思いついた解決策でチェックしてください。 – enriqg9