php - Laravel Eloquent 查找日期在 JSON 列范围内的所有记录

标签 php mysql json laravel eloquent

我正在尝试使用 Eloquent 来查询数据库中的记录表,并且只检索那些由对象数组组成的 json 列中至少有 1 条记录在给定日期范围内的记录。
日期列如下所示:

[
  {'date': '2021-01-01'},
  {'date': '2021-01-02'},
  {'date': '2021-01-03'},
]
如果我通过了“2021-01-01”的开始日期,则需要获取所有日期的记录。*.date 等于或晚于该开始日期。
这同样适用于 end_date。
我有不同类型的语法,例如:
$this->where('dates->[*]->date', '<=', date($value));
$this->where('dates->*->date', '<=', date($value));
$this->where('dates.*.date', '<=', date($value));
似乎没有任何效果。
我究竟做错了什么?

最佳答案

JSON_TABLE 可能是唯一的(好的)纯 SQL 方法。这需要 MySQL 8.0.4 或更高版本。这是 Eloquent:

$this->whereExists(function($query) {
        $query->fromRaw(
            'json_table(json_extract(`dates`, "$[*].date"), "$[*]" columns(`json_date` date path "$")) as `sub`'
        )
        ->where('json_date','>=','2021-01-01');
    })->get();
解释:json_extract$[*].date由于路径参数将数据转换为常规数组 ["2020-01-01", "2020-01-02", "2020-01-03"] )json_table将 json 数据转换为常规 sql 行:


json_date


2020-01-01

2020-01-02

2020-01-03


应用 where 子句并将结果行过滤为仅具有现有 json_date 的行。 json 表中的行。

关于php - Laravel Eloquent 查找日期在 JSON 列范围内的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67837261/

相关文章:

json - 如何在 RAd Studio 中解析 JSON 数组?

php - 阿普塔纳:哪个更好?单机版还是 Eclipse 插件版?

php - 如何使用 ZF 在身份验证适配器中添加凭据列

mysql - 如何在插入值存在的地方替换主键?

python - 操作错误 : (1101, BLOB、TEXT、GEOMETRY 或 JSON 列 field_name 不能有默认值)

c# - 在嵌套对象上使用 JsonConvert.DeserializeObject

java - Spring Boot Redis 将 POJO 列表存储为值

php - 如何删除 Zend Framework 中的表单属性?

php - 使用提升的权限和 PHP 编辑系统文件

mysql - 触发器触发另一个触发器不起作用