2017-02-16 2 views
4

내 요청 데이터는 새로운 항목과 기존 항목의 배열을 나타냅니다. 이 배열을 통해 항목을 업데이트하고 만들려고합니다.Laravel 5.4 : 요청 배열을 반복하는 방법은 무엇입니까?

이 내가 배열을 검색하는 방법입니다

나중에 내가 기존 항목 업데이트 코드의
$userInput = $request->all(); 
foreach($userInput['items'] as $key=>&$item){ 

:

$updateItem = Item::find($item['id']); 
$updateItem->number = $item['number']; 
$updateItem->save(); 

그러나 $item['number']는 이전 업데이트에서 기존의 입력을 포함하는 것 아닌 값을 나는 지난 번에 들어갔다.

어떻게 Laravel에서 요청 데이터를 반복 할 수 있습니까?

내가 그것을 실행으로 이는 전체 코드입니다 (혼란을 제거하려는) : 이것은 HTML에서 입력이

$userInput = $request->all(); 
// checking $userInput here 
// I can see the new value in the array 

foreach($userInput['items'] as $key=>$item){ 
    if($item['delete'] == 1) { 
    Item::where('order_id',$order->id) 
     ->where('id',$item['id']) 
     ->delete(); 
    } else { 
    if(empty($item['id'])) { 
    } else { 
     $updateItem = Item::find($item['id']); 
     $updateItem->number = $item['id']; 
     $updateItem->save(); 
    } 
    } 
} 

(단지 내가 또한 양식을 확인 보여, 데이터가 잘 온다) :

<input id="basicItemNumber-31" class="form-control" name="items[31][number]" placeholder="Unique number" value="31" type="text"> 
+0

통과하지 마십시오'$ item' 참고로'예기치 않은 동작을 얻을 수 for'. 즉'$ item'을 사용하십시오 * not *'& $ item' – Luke

+0

이것을 제거하고 .it는 작동합니다 – JYoThI

+0

값으로 전달하여 내 질문을 업데이트했지만 여전히 동일한 결과를 제공합니다. – sr9yar

답변

1

그것은 당신이 변수 이름 앞에 &를 사용하여 참조 (하여 통과로 for 당신이 실수로 부하 $item의 값을 변경 한 곳의 내부 가능성이 높습니다)

.

"예기치 않은"동작으로 이어질 수 있으므로 일부 또는 대부분의 사람들은 나쁜 습관으로 간주합니다. 해당 루프 아래의 샘플 코드를 array$items을 두 번 두 번 참조하여 값으로 한 번 가져옵니다.

<?php 

$items = ['one','two','three']; 

foreach ($items as &$item) { 
    //do nothing. 
} 

foreach ($items as $item) { 
    //do nothing again. 
} 

var_dump($items); 

//outputs 

array(3) { 
    [0]=> 
    string(3) "one" 
    [1]=> 
    string(3) "two" 
    [2]=> 
    &string(3) "two" 
} 
+0

참조 부호로 표시된 패스가 오도 된 것 같습니다. 미안합니다. 나는 내가 생각할 수있는 모든 어리석은 것들을 시도하고 우연히 질문을 쓸 때 그것을 떠났을 정도로 밝은 아이디어가 없었다. 원래 $ item을 값으로 전달했지만 여전히이 문제가있었습니다. – sr9yar

+0

필자가 제안 할 수있는 것은'dd ($ item [ 'number'])'라고하고 여러분이 기대하는 바를 확인하는 것입니다. 거기에서 운동하십시오. – Luke

+0

솔직히 말해서 내가 묻기 전에 멈췄다. :) 나는 내가 이해할 수없는 몇 가지 마법이 있다고 생각했다. 어쨌든, dd는 나에게 올바른 가치를 제공합니다. 과! '$ updateItem-> number = 999;와 같이하면 올바르게 저장됩니다. 당신의 도움을 주셔서 감사합니다. – sr9yar

0

이 지역의 당신의 범위를 유지할으로 이런 일을 시도해보십시오

$request['items']->each(function($item, $key) use ($order) { 
    if ($item->delete) { 
     Item::where('order_id',$order->id) 
       ->where('id',$item['id']) 
       ->delete(); 
    } else { 
     if (!empty($item['id'])) { 
      $updateItem = Item::find($item['id']); 
      $updateItem->number = $item['id']; 
      $updateItem->save(); 
     } 
    } 
}); 
관련 문제