首页 > 解决方案 > laravel 将 json 保存到数据库 mysql

问题描述

我在将 json 结果保存到 mysql 数据库中的表时遇到问题。

json返回

{ "retorno": {
  "status_processamento": 3,
    "status": "OK",
    "pagina": "1",
    "numero_paginas": "1",
    "pedidos": [
      {
        "pedido": {
          "id": 123456,
          "numero": 123456,
          "numero_ecommerce": "12",
          "data_pedido": "01/01/2013",
          "data_prevista": "10/01/2013",
          "nome": "Cliente Teste",
          "valor": "100.25",
          "id_vendedor": "123456",
          "nome_vendedor": "Vendedor Teste",
          "situacao": "Atendido"
        }
      },
      {
        "pedido": {
          "id": 123456,
          "numero": 123458,
          "numero_ecommerce": "15",
          "data_pedido": "01/01/2013",
          "data_prevista": "10/01/2013",
          "nome": "Cliente Teste 3",
          "valor": "50.25",
          "id_vendedor": "",
          "nome_vendedor": "",
          "situacao": "Aberto"
        }
      }
    ]
  }
}

模型

namespace App;

use Illuminate\Database\Eloquent\Model;
class Rating extends Model
{

 protected $fillable = [

          'ratingKey'

      ];

}

控制器

  $data = json_decode($response, true);

  Rating::create(
  [ 'ratingKey'  => $data['retorno']['pedidos'][0]['pedido']['id']   ]);

此代码完美运行,但仅从 json 保存一个答案,我想保存所有答案,如果我将代码更改为

'ratingKey'  => $data['retorno']['pedidos'][]['pedido']['id'] 

我收到这个错误

Symfony\Component\Debug\Exception\FatalErrorException 无法使用 [] 读取

标签: phplaravel-5

解决方案


您只需要迭代您的$data['retorno']['pedidos']数组,创建一个结构化数组数组以传递给Rating::insert()方法(docs)。

$data = json_decode($response, true);

$ratingKeys = [];
foreach($data['retorno']['pedidos'] as $o){
    $ratingKeys[] = ['ratingKey' => $o['pedido']['id']];
}

Rating::insert($ratingKeys);

推荐阅读