json - Laravel 使用 SQL LIKE 运算符过滤 JSON 数据
问题描述
代码
//text to search
$details = "Successfully";
ActivityLog::with('getCauserDetails')
->when($details ?? false, function ($q) use ($details) {
$q->whereJsonContains('properties->activity', $details);
})
->get()
->toArray();
表结构
id - int
name - varchar
properties - json
user_id - int
json数据
{
"ip":"192.168.0.1",
"platform":"Windows",
"activity":"Successfully logout"
}
{
"ip":"192.168.0.1",
"device":"WebKit",
"browser":"Chrome",
"platform":"Windows",
"activity":"Successfully logged in"
}
问题:以上代码已经成功搜索到JSON数据中的数据值,但需要搜索成完整的句子。例如,“注销成功”,如果我用“成功”语句搜索,它不会过滤数据。有谁知道如何使用 中的 SQL LIKE 运算符过滤它,这意味着如果JsonContains
我用句子“成功”过滤,它也会返回数据而不是完整的句子。
解决方案
我没有找到任何合适的 Laravel 方法,但您在 SQL 中的查询将是这样的。除了使用原始查询之外,您似乎别无选择:
SELECT *
FROM table_name
WHERE JSON_EXTRACT(properties, "$.activity") LIKE '%Successfully logout%'
推荐阅读
- c++ - 从文件读取后,数组包含“垃圾”值
- python - Python Argparse:获取用于命名空间变量的命令行参数
- oracle - Plsql / jdbc 日期输入参数作为字符串
- sequelize.js - sequelize 相同表之间的一对一和一对多关联
- postgresql - 带有指标的 Postgres 查询审计日志
- mediawiki - 无法从 Mediawiki API 获得格式合理的 JSON 响应
- python - 使用 if elif 语句检查三个条件(以各种方式)
- c# - 通用对象 -> webapi 的对象转换
- dart - 从对象列表中调用对象元素
- protocol-buffers - 恢复原始定义中的保留字段可以吗?