Это данные, когда пользователь отправляет форму:

POST Data

_token  
"JNDt8WC6kVbvrSdFTKSGnHsfzTuIsbthslf5Gqjs"

invoice_number  
"15"

dateofbill  
"2019-04-19"

customer_name   
"praveen kumar tiwari"

customer_mobile 
"8924001750"

sno 
array:3 [▼
  0 => "1"
  1 => "2"
  2 => "3"
]

item_name   
array:3 [▼
  0 => "jeans"
  1 => "shirt"
  2 => "lower"
]

qty 
array:3 [▼
  0 => "2"
  1 => "3"
  2 => "2"
]

price   
array:3 [▼
  0 => "20000"
  1 => "232"
  2 => "12"
]

gst 
array:3 [▼
  0 => "1200"
  1 => "22"
  2 => "12"
]

discount    
array:3 [▼
  0 => "100"
  1 => "23"
  2 => "12"
]

textarea    
""

Я не могу сохранить эти данные в таблице. я пытаюсь с для цикла, но получаю ошибку «Неопределенное смещение: 3».

Код внутри контроллера

for($i=0;$i<=count($request['sno']);$i++)
        {
            $invoice = new Invoice;
            $invoice->sendbill_id=$bill->id;
            $invoice->sno=$request['sno'][$i];
            $invoice->item_name=$request->item_name[$i];
            $invoice->qty=$request->qty[$i];
            $invoice->price=$request->price[$i];
            $invoice->gst=$request->gst[$i];
            $invoice->discount=$request->discount[$i];
            $invoice->save();
 }

Я хочу сохранить эти 3 значения в виде массива (sno, item_name, qty, price, gst, discount) в 3 разных строках

0
praveen kumar 20 Апр 2019 в 01:12

2 ответа

Лучший ответ

Проблема у вас действительно в вашем цикле: for($i=0;$i<=count($request['sno']);$i++). Чтобы быть конкретным, это прямо здесь <=:

$i<=count()
  ^^


Посмотрите на ваш массив:

[
  0 => "1"
  1 => "2"
  2 => "3"
]

Вы получили 3 объектов. Поэтому count($request['sno']) вернет 3, поскольку функция count() не начинает отсчет с 0!
Однако при вызове индекса (например, $request['sno'][1]) не вернет первый объект (0 => "1"), но второй (1 => "2"). Я думаю, вы видите, куда я иду.

Поскольку цикл будет продолжаться до тех пор, пока $i не будет равен 3, цикл будет выполнен 4 раза. В последний раз (где $i == 3) вы пытаетесь извлечь 4-й элемент из вашего массива, который не существует, поэтому появляется сообщение об ошибке: Undefined offset: 3.

Чтобы решить это, просто измените это

$i<=count()
  ^^

В <. Цикл будет выполняться только в том случае, если $i еще меньше, чем 3. Это тот случай, если $i == 2. Сообщение об ошибке не появится.

Я не хочу нападать или причинять вам вред каким-либо образом, но мне кажется, что вы относительно новичок в PHP. Конечно, это не позор, но мне интересно, подходит ли вам такой огромный каркас, как Laravel. Сначала основы, затем продвинутые.
Но это всего лишь небольшой комментарий и совет от меня.

0
Aaron3219 11 Май 2019 в 20:20

Вы должны попытаться использовать laravel eloquent, чтобы сохранить его. Вот пример, который вы можете проверить. Laravel: вставка "многие ко многим"

1
Sok Chanty 20 Апр 2019 в 01:59