2016-09-29 4 views
0

У меня есть массив так же, как это:Перебор массива

enter image description here

У меня есть вопрос, как я могу Foreach через объекты. Я хочу связать каждую из них с контейнером.

Так что я попытался это:

foreach ($data['plates'] as $index => $element) { 
    //Don't worry about the container_id. 
    $plates = Plate::find($element['plate_id'])->plateContainer()->associate($data['container_id'])->save(); 
} 

Но не могу показаться, чтобы получить эту работу. Любые идеи, что я делаю неправильно или не хватает?

FYI-Отношения между моделями

Тарелка Модель

public function plateContainer() 
{ 
    return $this->belongsTo('App\Models\PlateContainer'); 
} 

PlateContainer Модель

public function plates() 
{ 
    return $this->hasMany('App\Models\Plate'); 
} 

Update # 1: Массив исходит из AngularJS после подача сима плечо форма. Извините, забыл упомянуть об этом.

Обновление № 2: Хорошо. Я попробовал следующее.

foreach ($data['plates'] as $element) 
{ 
    foreach ($element as $value) 
    { 
     $plates = Plate::find($value)->plateContainer()->associate($data['container_id'])->save(); 
    } 
} 

... но все еще не получается его работать. Проверяя БД, он показывает только, что первая пластина была обновлена ​​с данным контейнером.

Я попытался dd($value); Это показывает только 1

+0

ли это массив JS или массив PHP? – Pete

+0

Почему здесь отмечен javascript? – callback

+0

@callback Извините. Я забыл упомянуть. Массив, исходящий от AngularJS. Я обновлю сообщение – user3641381

ответ

1

Ваш $data['plates'] содержит 2 ассоциативные массивы: [0] => {...} и т.д., и [1] => {...} и т.д.. Для этого вам нужен вложенный цикл.

for ($i=0; $i<count($data['plates']); $i++) { 
    foreach ($data['plates'][$i] as $index => $element) { 
    //Don't worry about the container_id. 
    $plates = Plate::find($element['plate_id'])->plateContainer()->associate($data['container_id'])->save(); 
    } 
} 
+0

Спасибо, но что, если у меня было более 2 элементов? – user3641381

+0

Обновлен мой ответ. Вместо жесткого кодирования предела цикла используйте функцию count() вместо этого, чтобы подсчитать количество элементов массива. –

+0

Я попробовал это снова. Странно, он обновляет только одну пластину с данным контейнером. Я снова обновил свой пост. – user3641381

0

Что-то было выключено.

foreach ($data['plates'] as $index => $element) { 


    $plates = Plate::find($element['plate_id'])->plateContainer()->associate($data['container_id'])->save(); 
} 

ли трюк

Смежные вопросы