JSON输入Laravel中的数组到字符串的转换

时间:2018-10-11 17:06:49

标签: php arrays json laravel

我正在尝试在Laravel之间的表中输入一些JSON数据,但是我正在接收Array字符串Conersion。

这是我的JSON:

{
  "data": [
    {
      "client_id": "3",
      "vehicle_id": "3",
      "cart1_id": "3",
      "cart2_id": "3",
      "driver1_id": "3",
      "driver2_id": "3",
      "shipper_id": "3",
      "transportationtype_id": "1",        
      "startdatetime": "2018-10-10 11:00:00",
      "enddatetime": "2018-10-10 18:00:00",
      "consultnumber": "3",
      "consultvalidity": "2018-10-20",
      "escorted": "1",                     
      "escortcompany": "Teste",
      "escortplate": "ABC-1234",
      "escorttrackingtecnology": "1",      
      "escorttrackingserial": "123",
      "contactname": "José",
      "contacttel": "17-997157517",
      "decoy": "0",                       
      "decoytrackingtecnology": "1",      
      "decoyserial": "9999",
      "decoysite": "www",
      "decoylogin": "123",
      "decoypassword": "bacd",
      "charged": "1",                 
      "charge": [
        {
          "description": "Teste Carga 1",
          "nf": "1234",
          "amount": "1000.00"
        },
        {
            "description": "Teste Carga 2",
            "nf": "4321",
            "amount": "2000.00"
        }
      ]
    }
  ]
}

这是我的控制器:

public function storeapi(Request $request)
{
            $array = $request->all();
            $insertedIds = [];

            foreach ($array['data'] as $row) {

                $validator = Validator::make($array['data'], [
                    $row['vehicle_id'] => 'required',
                    $row['driver1_id'] => 'required',
                ]);

                if($validator->fails()) {
                    return response()->json([
                        'message'   => 'Validation Failed',
                        'errors'    => $validator->errors()->all()
                    ], 422);
                }


                $newSm = Sm::create([
                    'client_id' => $row['client_id'],
                    'veiculo_id' => $row['vehicle_id'],
                    'carreta1_id' => $row['cart1_id'],
                    'carreta2_id' => $row['cart2_id'],
                    'motorista1_id' => $row['driver1_id'],
                    'motorista2_id' => $row['driver2_id'],
                    'embarcador_id' => $row['shipper_id'],
                    'tipotransporte_id' => $row['transportationtype_id'],
                    'inicioprevisao' => $row['startdatetime'],
                    'fimprevisao' => $row['enddatetime'],
                    'nroliberacao' => $row['consultnumber'],
                    'datavigencia' => $row['consultvalidity'],
                    'escolta' => $row['escorted'],
                    'empresa' => $row['escortcompany'],
                    'placaescolta' => $row['escortplate'],
                    'tecnologia_id' => $row['escorttrackingtecnology'],
                    'serial' => $row['escorttrackingserial'],
                    'nomecontato' => $row['contactname'],
                    'telefonecontato' => $row['contacttel'],
                    'isca' => $row['decoy'],
                    'tecnologiaisca_id' => $row['decoytrackingtecnology'],
                    'serialisca' => $row['decoyserial'],
                    'siteisca' => $row['decoysite'],
                    'login' => $row['decoylogin'],
                    'senha' => $row['decoypassword'],
                    'status_id' => "1"
                ]);

                $insertedIds[] = $newSm->id;

                foreach ($row['charge'] as $key => $charge){
                    $carga = new Carga();
                    $carga->descricao = $charge['description'];
                    $carga->nf = $charge['nf'];
                    $carga->valor = $charge['amount'];
                    $carga->sm_id = $insertedIds;
                    $carga->save();
                }
                return response()->json($insertedIds, 201);
         }
}

这是返回的错误:

  

Illuminate \数据库\ QueryException   数组到字符串的转换(SQL:插入到cargasdescricaonfvalorsm_idupdated_atcreated_at )值(Teste Carga 1,1234,1000.00,89,2018-10-11 16:55:57,2018-10-11 16:55:57))

2 个答案:

答案 0 :(得分:0)

您有$carga->sm_id = $insertedIds;正在将数组写入数据库。你不能做这个。要么存储单个sm_id,要么使用serialize($carga->sm_id)序列化数组,或者如果您需要为此行使用多个ID,则对数据库进行规范化,然后创建第二个表并使用外键。

编辑:

检查您的代码,您可能需要这样做:

$carga->sm_id = $newSm->id;
$carga->save();
...

答案 1 :(得分:0)

使用此:

$insertedIds[] = $newSm->id;

  foreach ($row['charge'] as $key => $charge){
      $carga = new Carga();
      $carga->descricao = $charge['description'];
      $carga->nf = $charge['nf'];
      $carga->valor = $charge['amount'];
      $carga->sm_id = $newSm->id;
      $carga->save();
  }

$newSm->id正在数据库表Car {x}中的数组$insertedIds[]$carga->sm_id中初始化时,Cargas的类型可能是整数或字符串