【问题标题】:Laravel Query Builder join on json data columnLaravel Query Builder 加入 json 数据列
【发布时间】:2019-03-17 13:47:21
【问题描述】:

在我的数据库中,我有一个通知表,其中有一个包含 JSON 字符串的数据列,如下所示:

{"sender_id":2,"sender_name":"John Doe","message":"Hello world!"}

我需要的是加入 users.id = notifications.data.sender_id 上的用户表,但我不知道如何或是否有可能。找不到有关此类查询的任何信息。

期待阅读您的解决方案。谢谢!

【问题讨论】:

  • json_decode($string, true); 对其进行解码,但对于查询它,我认为没有可能的方法。为什么不将它们存储为单独的列?
  • 我正在处理一个包含大量数据库记录的现有项目。更改数据库结构不是一种选择..
  • 只有这3个键吗?如果是这样,老实说,我会更改数据库结构,否则您需要使用 %like% 进行查询,这会慢很多
  • 大多数时候是的,但有些情况下还有 2 个额外的键...
  • 让我们听听其他人会怎么说。如果不是,那么更改数据库并不难,您只需要一个播种机在您的数据库中以正确的格式播种数据:) 我怀疑当前的结构将来会继续咬你 - 或者至少添加 1 sender_id 的表中的新列并保持 json 列不变,将解决您的问题

标签: mysql json laravel eloquent query-builder


【解决方案1】:

你可以做一个小技巧:

$id = 123;
YourModel::where('json_data_column', 'like', '%"sender_id":' . $id . ',%');

您基本上是在 JSON 中进行字符串搜索。但是,MySQL 中还有一个JSON 列类型,它可以更好地支持 JSON 搜索。然后你可以这样做:

$id = 123;
YourModel::where('json_data_column->sender_id', $id);

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2013-03-19
    • 2021-08-20
    • 2019-08-11
    • 2022-01-20
    • 2023-03-29
    • 1970-01-01
    • 2021-02-26
    • 2015-06-15
    相关资源
    最近更新 更多