【问题标题】:Laravel query json column arrayLaravel 查询 json 列数组
【发布时间】:2021-01-26 19:10:48
【问题描述】:

我正在尝试使用 laravel 控制器访问 json 列中的特定数据,DB 列称为“figuresinorder”。我想访问“wants”键,但是当存储了多个值时它不起作用。

{"wants": ["1"], "trades": ["12,33,234"]} - 这行得通

{"wants": ["1,2,3"], "trades": ["12,33,234"]} - 不起作用

控制器中查询如下:

$figures2 = customtrades::whereJsonContains('figuresinorder->wants', ['1'])->get();

任何帮助都会得到很大的帮助,我被困在这上面的时间比我敢承认的要长。

【问题讨论】:

  • 将是{"wants": ["1","2","3"], "trades": ["12,33,234"]}
  • 失眠症22。如果源是 ["1,2,3"],您确定搜索 ["1"] 会返回 TRUE。我想如果你搜索 ["1,2,3"] 会起作用。
  • ["1,2,3"] 是数组有一个字符串,你的问题是存储数据。应该是:["1", "2", "3"]
  • Sta - 数据由 laravel 直接以该格式存储,我尝试使用您建议的格式,但这仍然没有返回所需的数据。工具箱 - 当查询有效时,确实会正确返回集合而不是 TRUE 语句。我需要能够直接搜索单个数字 id 而不是整个数组。

标签: php laravel


【解决方案1】:

MySQL & PostgreSQL 支持whereJsonContains() 具有多个值,如下所示:

customtrades::whereJsonContains('figuresinorder->wants', ['1','2','3'])->get();

有关更多信息,请参阅文档here

【讨论】:

  • OP 想要返回 wants 包含 1 的任何行,这不会这样做
  • 我存储数据的方式不正确,如第一条评论中所述。更新数据库列值时,我得到了所需的响应。令人惊讶的是,存储数据是 laravel 从我的会话中存储数据的方式。感谢您的帮助斯塔。
  • @Wesley 根据官方文档,需要按照上面的方法对dara进行排序
  • @insomniac22 选择这个作为正确答案是误导和不正确的。正如您所说,问题在于您存储数据的方式,不是您选择它的方式
  • @sta 请按照“您将数据错误地存储为逗号分隔的字符串而不是数组。如果您将存储更改为正确存储字符串数组,那么您的原始尝试将按预期工作”如果包含该内容或类似内容,这将是一个正确的答案。
猜你喜欢
  • 1970-01-01
  • 2018-11-14
  • 2015-02-11
  • 2013-11-03
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多