【发布时间】:2022-02-11 00:12:24
【问题描述】:
当我从名为 workflow_conflicts 的表中对该特定模型运行 first() 时,我有以下 Laravel 6.x 集合输出。如您所见,conflicts 列是JSON 列,并以下面这种方式存储数据。
Models\WorkflowConflict {
id: 2190,
created_at: "2022-02-10 12:18:28",
updated_at: "2022-02-10 12:22:36",
action: "approved",
conflicts: "[{"text": "validatorword 1218" "word": "validatorword", "indicies": {"end": 13, "start": 0}, "workflow_id": 4334}]",
user: Models\User {
id: 17843,
suspended: 0,
},
}
我想弄清楚我将如何使用 Laravel Eloquent(我正在使用 Tinker)我将如何对冲突的 json 值执行搜索,例如来自 text 和 word 的值。
例如 - 下面将在 Tinker 中很好地返回对象,但我不确定如何对 JSON 数据的 conflicts 行执行类似的搜索。
WorkflowConflict::where('action', 'approved')->first();
-- Tinker 内部的预期结果--
WorkflowConflict::where('conflicts->text', 'validatorword 1218')->first();
=> Models\WorkflowConflict {
id: 2190,
created_at: "2022-02-10 12:18:28",
updated_at: "2022-02-10 12:22:36",
action: "approved",
conflicts: "[{"text": "validatorword 1218" "word": "validatorword", "indicies": {"end": 13, "start": 0}, "workflow_id": 4334}]",
user: Models\User {
id: 17843,
suspended: 0,
},
}
-- Tinker 内部的实际结果--
WorkflowConflict::where('conflicts->text', 'validatorword 1218')->first();
=> null
TLDR - 尝试使用 Laravel 中的 JSON 列值进行搜索
【问题讨论】:
-
你的 json 是一个数组吗?
conflicts->text如果没有被数组包裹,它会起作用:{"text": "validatorword 1218" "word": "validatorword", "indicies": {"end": 13, "start": 0}, "workflow_id": 4334}(无方括号) -
是的,这就是我们将它存储在数据库中的 json 数组中的方式
标签: php laravel eloquent laravel-6 tinker