laravel集合按数据库中的json数据排序

问题描述

我想按价格订购我的所有产品。在“产品”表中,有product_options列,在该列的内部,我有json数据,类似这样;

{"price":390,"discounted_price":26,"quantity":168}

我尝试订购product_options,但是按字母顺序返回,所以17在1000之后。看来我应该为此使用集合函数,但是我真的很陌生。

$searchData = DB::table('posts')->where('type','=','product')->whereNotNull('product_options')->orderBy('product_options->price')->get();

当我返回dd函数时,它看起来像那样

enter image description here

有人可以帮我吗?

解决方法

只需将json属性转换为十进制或整数。

$searchData = DB
    ::table('posts')
    ->where('type','product')
    ->whereNotNull('product_options')
    ->orderByRaw("CAST(product_options->>'$.price' AS DECIMAL(10,6))")
    ->get();