Неопределенный индекс от формы POST к контроллеру в Laravel

#php #laravel

#php #laravel

Вопрос:

У меня есть небольшая проблема, которая меня немного расстраивает.

В моем запросе, который я отправляю, у меня есть следующие поля, в которых есть несколько строк:

 <input type="text" name="invoiceables[{{$id}}][id]">
<input type="text" name="invoiceables[{{$id}}][amount]">
<input type="text" name="invoiceables[{{$id}}][notes]">
  

И если я извлеку исключение, вот как это выглядит в качестве примера возврата:

 invoiceables (array (2)):
-- 3127 (array(3):
---"id" => "3127"
---"amount" => "15.00"
---"notes" => "test1"

-- 3082 (array(3):
---"id" => "3082"
---"amount" => "25.00"
---"notes" => "test2"
  

Но когда я использую следующее в своем контроллере, я получаю ошибку «Неопределенный индекс: количество»:

 foreach($request->invoiceables['amount'] as $key => $val){
    $manifest = Carrier_Manifest::findOrFail($key);
    $manifest->invoices()->save($invoice,['amount'=>$request->invoiceables['amount'][$key],'notes'=>$request->invoiceables['notes'][$key]]);
    }
  

Ответ №1:

Ваша структура данных:

 $_POST['invoiceables']['SOME ID']['amount']
  

Вы игнорируете 'SOME ID' часть и пытаетесь прочитать сумму непосредственно из накладных.

У вас есть несколько счетов-фактур, каждый из которых имеет определенную сумму.

Ответ №2:

Вы неправильно обращаетесь к размерам массива. В вашем цикле $key становится идентификатором, а $ val — массивом данных, подлежащих оплате. Попробуйте это:

 foreach($request->invoiceables as $key => $val){
    $manifest = Carrier_Manifest::findOrFail($key);
    $manifest->invoices()->save($invoice,['amount'=>$val['amount'],'notes'=>$val['notes']]);
    }
  

Комментарии:

1. Я должен также отметить, что в моем ответе я удалил средство доступа [‘amount’] из массива цикла, поскольку это указывало бы на массив сумм, тогда как вы хотите получить доступ к данным в виде массива invoiceables.

Ответ №3:

Вы вводите его в массив: $invoiceables[id][сумма]

но вы получаете к нему доступ следующим образом: $ invoiceables[сумма] [идентификатор]