【问题标题】:Looping Array of Json to Database Laravel?将 Json 数组循环到数据库 Laravel?
【发布时间】:2021-03-20 01:12:38
【问题描述】:

我有这样的 Json 数据:

$data = '[
    {
        "OrderId": "1038806370",
        "qtty": "1",
        "Item": "Strawberry 250 gr",
        "SKU": "20091"
    },
    {
        "OrderId": "1038806370",
        "qtty": "2",
        "Item": "Strawberry 130 gr",
        "SKU": "20092"
    },
    {
        "OrderId": "1038806370",
        "qtty": "1",
        "Item": "Strawberry 130 gr",
        "SKU": "20092"
    }
]';

我想使用 PHP Laravel 将 MySql 保存在我的数据库中,...

我想将数据从 json 保存到我的表中,有表 Order[orderID,...]OrderDetail[orderID, SKU, Qty]

这是我在控制器中的代码

$order = json_decode($data, true);

foreach ($order as $ord) {
    $check = Order::where('orderid', $ord['OrderId'])->get();

    if (count($data) > 0) {
        OrderDetail::firstOrCreate([
            'order_id' => $ord['OrderId'],
            'sku_id' => $ord['SKU'],
            'qty' => $ord['qtty']
        ]);
    } else {
        Order::create([
            'orderid'=> $ord['OrderId'],
        ]);
       
        OrderDetail::firstOrCreate([
            'order_id' => $ord['OrderId'],
            'sku_id' => $ord['SKU'],
            'qty' => $ord['qtty']
        ]);
    }
}

但我没有得到我想要的,我得到 QTYSKU 200912 但实际的 json 数据是 3

【问题讨论】:

  • 您的 $data 缺少数组括号:[{...},{...}]
  • 保存数据怎么样? @MaartenVeerman
  • 你检查$data的计数,你应该检查$check的计数

标签: mysql json laravel


【解决方案1】:

我不确定您为什么要计算 $data 而不是 $check 变量。不过,您也不需要 $check 变量。我会在下面重写你的代码。

$order = json_decode($data, true);

foreach ($order as $ord) {
    // use EXIST query to check if Order exists or not.
    if (Order::where('orderid', $ord['OrderId'])->exists())
        OrderDetail::firstOrCreate([
            'order_id' => $ord['OrderId'],
            'sku_id' => $ord['SKU'],
            'qty' => $ord['qtty']
        ]);
    } else {
        Order::create([
            'orderid'=> $ord['OrderId'],
        ]);

        OrderDetail::firstOrCreate([
            'order_id' => $ord['OrderId'],
            'sku_id' => $ord['SKU'],
            'qty' => $ord['qtty']
        ]);
    }
}

但您的 if/else 也可以使用 firstOrCreate() 方法删除。

$orders = json_decode($data, true);

foreach ($orders as $order) {
    // Get Order Model with orderid = $order['OrderId'] or create it if it doesn't exist
    $model = Order::firstOrCreate([
        'orderid'=> $order['OrderId']
    ]);
    // Get OrderDetail with provided SKU, qtty and orderid or create it if it doesn't exist. 
    OrderDetail::firstOrCreate([
        'order_id' => $model->orderid
        'sku_id' => $order['SKU'],
        'qty' => $order['qtty']
    ]);
}

你也可以内联。

$orders = json_decode($data, true);

foreach ($orders as $order) {
    OrderDetail::firstOrCreate([
        'order_id' => Order::firstOrCreate(['orderid'=> $order['OrderId']])->orderid,
        'sku_id'   => $order['SKU'],
        'qty'      => $order['qtty'],
    ]);
}

【讨论】:

猜你喜欢
  • 2019-10-18
  • 2018-01-31
  • 2019-03-28
  • 1970-01-01
  • 2021-07-24
  • 2019-05-13
  • 2021-06-10
  • 1970-01-01
  • 2018-11-08
相关资源
最近更新 更多