问题描述
我想按价格订购我的所有产品。在“产品”表中,有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函数时,它看起来像那样
有人可以帮我吗?
解决方法
只需将json属性转换为十进制或整数。
$searchData = DB
::table('posts')
->where('type','product')
->whereNotNull('product_options')
->orderByRaw("CAST(product_options->>'$.price' AS DECIMAL(10,6))")
->get();