php查询数据库字段为JSON类型的数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 总结


前言

php 查询字段为json对象的数据,以及查询字段为json数组的数据


提示:以下是获取数据列表部分代码,仅供参考

// 获取过滤条件
$filter = Request::post('filter', []);
// 搜索条件为json格式字段
$fields = [
'materials',
'crafts',
'colors',
'tags'
];
$jsonFilter = array_filter($filter, function ($item) use ($fields) {
return \in_array($item['key'], $fields, true);
});
$filter = Arr::except($filter, $fields);
// 获取过滤条件
$query = ModelSku::whereFilter($filter);
foreach ($jsonFilter as $item) {
// 拆分数组
$filter = explode(',', $item['value']);
$sql = [];
// 循环数据值
foreach ($filter as $value) {
// 如果为json对象的话组成sql语句
if ($item['key'] == 'materials' || $item['key'] == 'colors') {
$sql[] = "JSON_CONTAINS({$item['key']}->'$',JSON_OBJECT('name','{$value}'))";  // 重点查JSON对象 库中数据lg:[{"code": "CR", "id": "1", "name": "测试"}, {"code": "GI", "id": "2", "name": "测试1}, {"code": "SE", "id": "3", "name": "测试2"}]
} else {
// 如果为json数组的话组成sql语句
$sql[] = "JSON_CONTAINS({$item['key']},'\"{$value}\"', '$')"; // 重点查JSON数组 库中数据lg:["21fec8e1-21bd-42a0-8f04-5fd95c213063", "cc7beeba-0f18-4468-8aea-0b5dd6144768"] 或 ["冷珐琅实心效果22", "彩色电镀"]
}
}
$query->where(implode(' or ', $sql), 'and');
}

// 获取分页
$page = Request::post('page');
// // 筛选条件
// $query = ModelSku::whereFilter($filter);
// 准备资源
$resource = Json::success();
if ($page) {
// 分页查询
$list = $query->paginate();
$resource->withoutWrapping();
} else {
// 全查
$list = $query->select();
}

总结

以上就是今天要讲的内容,希望对你有帮助

你可能感兴趣的:(json字段,php)