Laravel Eloquent - 使用 JSON 对象数组

Posted

技术标签:

【中文标题】Laravel Eloquent - 使用 JSON 对象数组【英文标题】:Laravel Eloquent - Working with an array of JSON objects 【发布时间】:2019-03-31 03:26:00 【问题描述】:

我的数据库中有一组 JSON 对象(如下图所示)

如何在其中搜索特定值?假设我想要“ends_at”字段等于“2018-11-24 08:00:00”的记录

我尝试过使用

->where('column->starts_at', '2018-11-24 08:00:00')

甚至尝试过

->whereJsonContains('column->starts_at', '2018-11-24 08:00:00').

在模型中,我已将列转换为数组 - 我是否遗漏了什么,或者不能这样做?

【问题讨论】:

也许你可以试试这个:DB::table('your_table')->whereRaw('json_contains(column, \'["value"]\')')->get(); 【参考方案1】:

使用这个:

->whereJsonContains('column', ['starts_at' => '2018-11-24 08:00:00'])

【讨论】:

@HelenChe 你的意思是->where('column->starts_at', '2018-11-24 08:00:00') 对不起,我的意思是<> 等等。我快速查看了 Builder 代码,但没有看到任何选项... 你的意思是->where('foo->bar', '<', 123) 是的...但前提是 foo->bar 在我的理解中只是键值。抱歉,如果我没有意义,但让我们尝试作为示例发布的原始问题:我将如何获得 availability > 9 的 JSON 数组的结果? 我试过->whereJsonContains('column', ['availability', '>', 9]) 不幸的是不能工作。

以上是关于Laravel Eloquent - 使用 JSON 对象数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 Eloquent 的 Laravel 块方法

Laravel 5 - 使用 Mockery 模拟 Eloquent 模型

Laravel 验证使用 eloquent 或 raw 查询

Laravel/Eloquent 建议覆盖 trait 属性?

Laravel Eloquent使用小记

使用 Laravel 5.5 接收 [Illuminate\Database\Eloquent\MassAssignmentException] 电子邮件