【问题标题】:Laravel Query Builder: How to access JSON key/value pairLaravel 查询构建器:如何访问 JSON 键/值对
【发布时间】: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 字段?

【问题讨论】:

  • 请分享您的数据库结构和数据

标签: php laravel postgresql laravel-5


【解决方案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 进行了更改,并使用空字符串进行比较。请看看这是否有效。
  • 我现在收到一条外键约束违规错误消息,这表明我......它有效!谢谢!现在我还有另一个问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-09-25
  • 2021-06-05
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多