我正在使用L5.2和MySQL 5.7。我在数据库中的meta列中有以下JSON:
{"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
等查询,都将获得结果,即使只输入了部分名字或姓氏也是如此。