Laravel 查询构建器:如何访问 JSON 键/值对
Posted
技术标签:
【中文标题】Laravel 查询构建器:如何访问 JSON 键/值对【英文标题】:Laravel Query Builder: How to access JSON key/value pair 【发布时间】:2020-12-04 17:29:30 【问题描述】:使用 Laravel 5.1,我如何在迁移中通过 Query Builder 访问 JSON 键/值对? json_data_column 中存储了 JSON 数据,我需要在 where() 查询生成器表达式中对其进行验证。逻辑是这样的:
DB::事务(函数() echo '正在删除 user_id 为空的行...' . php_EOL; DB::table('payment_methods')->where('json_data_column->user_id', '""')->delete(); );但是,链接似乎在这里不起作用。事实上,输出是:
[照亮\数据库\查询异常] SQLSTATE [42703]:未定义列:7 错误:列“user_id”不存在 第 1 行:...“payment_methods”,其中“json_data_column”->user_id... ^(SQL:从“payment_me”中删除 thods" where "payment_platform_data"->user_id = "")
在这种情况下,是否可以使用上面的逻辑进行链接?如果没有,如何访问 JSON 字段?
【问题讨论】:
请分享您的数据库结构和数据 【参考方案1】:您需要将user_id
放在单引号中,否则它会被视为标识符:
DB::table('payment_methods')->where("json_data_column->>'user_id'", '')->delete();
【讨论】:
错误:[Illuminate\Database\QueryException] SQLSTATE[42883]:未定义函数:7 错误:运算符不存在:json = 未知第 1 行:...方法”其中“json_data_column "->'user_id' = $1 ^ 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加明确的类型转换。(SQL:从 "payment_methods" 删除其中 "json_data_column"->'user_id ' = "") @leym 我将取消引用user_id
作为文本而不是 json 进行了更改,并使用空字符串进行比较。请看看这是否有效。
我现在收到一条外键约束违规错误消息,这表明我......它有效!谢谢!现在我还有另一个问题:)以上是关于Laravel 查询构建器:如何访问 JSON 键/值对的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 的查询构建器 JSON 选择器 `field->key` 导致语法错误