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 对象数组的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5 - 使用 Mockery 模拟 Eloquent 模型
Laravel 验证使用 eloquent 或 raw 查询
Laravel/Eloquent 建议覆盖 trait 属性?
使用 Laravel 5.5 接收 [Illuminate\Database\Eloquent\MassAssignmentException] 电子邮件