Laravel 5.2 Mysql 5.6 Eloquent json query 怎么实现?

records 表中有一个 columnvalue,里面存的是一个字符串,类似:{ number: 20}.
现在需要对这个表进行 where 筛选,筛选出 value 里 number < 100 的。

Laravel Query 该怎么写呢?

注意:Laravel 5.2 Mysql 5.6 不支持 json query。

JellyBool

不支持的话,你查找出来之后再 filter 一下呗

yugihuang

mysql5.7以后才原生支持json数据类型, 所以还是尽量避免这种设计吧.

可以像JellyBool老师说的那样, 使用Eloquent模型查出来后, 使用filter方法过滤掉一下,
首先是需要在模型中设置属性$casts = [‘value’ => ‘array’]

$filtered = $model->get()->filter(function($item) {
    return $item['value']['number'] < 100;
});

但是这样是不太好的设计, 浪费大量数据库查询时间, 而且占用大量内存.
而且实际工程中, 还要考虑更新, 并发(自增, 自减)等情况.
因此在数据库不原生支持JSON数据类型的情况下, 请三思再使用吧.

charlie 回复 yugihuang

历史遗留系统,需要新增功能。比较被动。