【问题标题】:Laravel get attribute value based on range from jsonLaravel 根据 json 的范围获取属性值
【发布时间】:2019-03-12 09:54:03
【问题描述】:

以下是在 Laravel 框架中编码的:

查询

$shipping = DB::table('shipping')->where('country',$delivery->country)->first();
$data= json_decode(json_encode($shipping),true);

结果

array (
  'id' => 3,
  'carrier' => 'EN',
  'country' => 'AU',
  'rates_json' => '{"rates": [{"international": [{"zone4": [{"to_kg": "2", "total": "1", "from_kg": "1"}, {"to_kg": "4", "total": "2", "from_kg": "3"}]}]}]}',
)  

在 MySQL 数据库中,我将“rates_json”存储在“JSON”数据类型列中。属性“from_kg”和“to_kg”是一个范围。

如果值在范围之间,我打算检索总数。例如,如果值 1.5 介于 1 和 2 之间,则总数为 1。

感谢您的帮助。

谢谢。

【问题讨论】:

  • 不要使用编码的解码。你有 toArray 功能。检查this 答案并在第一个语句中使用另一个 where 闭包。

标签: mysql json laravel


【解决方案1】:

由于您的问题不清楚,
我只能给你一个提示,你能做什么。

foreach (json_decode($data['rates_json'])->rates as $rates) {
    foreach ($rates->international as $international) {
        foreach ($international->zone4 as $zone) {
            if ($zone->from_kg <= $zone->total &&  $zone->total <= $zone->to_kg) 
            {
                // do whatever you want here.
                dump($zone->total);
            }
        }
    }
}

如有任何调整,请告诉我。

【讨论】:

  • 是的。这是我正在寻求的解决方案,我正在调整。
  • 我将“$zone->total”替换为“$weight”,其中“$weight”是我提供的值。现在我想弄清楚,假设一个包裹的最大重量限制是 30 公斤,但我的包裹超过 30 公斤,那么我该如何计算剩余公斤的值,然后将它们相加。
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多