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` 导致语法错误

如何在 laravel 查询生成器上获取主键名称

Laravel:合并两个查询构建器

Laravel 8,创建一个查询构建器并逐步向其中添加更多查询,如何逐步回滚?

如何将原生 PHP 转换为查询构建器 Laravel?

如何使用 Laravel 的流畅查询构建器选择计数?