【发布时间】:2016-09-03 11:32:21
【问题描述】:
我正在使用 L5.2 和 MySQL 5.7。我在数据库中的元列上有以下 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等查询之前的方法都会得到结果。即使有部分名字或姓氏。
【问题讨论】: