如何在包含具有 Eloquent 的对象数组的 json 字段中求和

Posted

技术标签:

【中文标题】如何在包含具有 Eloquent 的对象数组的 json 字段中求和【英文标题】:How to sum in a json field that contains an array of objects with Eloquent 【发布时间】:2020-05-08 16:02:08 【问题描述】:
[
  "id":4,"sum":19,
  "id":3,"sum":9,
  "id":6,"sum":32, 
  "id":2,"sum":32
]

我正在尝试这个,但它只能找到 1 个值,如何通过“总和”值的总和找到?

 $query->whereJsonContains('programs', [['sum' => intval($search)]]);

【问题讨论】:

你的查询有一个 where 子句,所以它会找到你定义的整数所在的行,并且只有那个值。 你能解释一下你想要达到的目标吗? 【参考方案1】:

现在 eloquent 支持此功能。 这在使用 mysql 5.7 的 Laravel 8 上对我有用:

Entity::sum('json_column->field')

【讨论】:

【参考方案2】:

你可以使用

//...
->whereRaw(
'JSON_CONTAINS(programs->"$[*].sum", "' . intval($search) . '")')->get();

See related

【讨论】:

以上是关于如何在包含具有 Eloquent 的对象数组的 json 字段中求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel Eloquent 中获取包含数组的 JSON 对象的值?

如何测试依赖于具有关系的 Eloquent 模型的类?

如何检查包含另一个对象数组的对象数组是不是具有属性

Laravel / Eloquent 模型属性可见性

如何在 Eloquent 中查询 JSON 列内的数组

Laravel Eloquent - 使用 JSON 对象数组