За последние 24 часа нас посетили 22019 программистов и 1128 роботов. Сейчас ищут 866 программистов ...

Проблема сохранения в БД на Laravel

Тема в разделе "Прочие вопросы по PHP", создана пользователем Alexus, 2 июл 2021.

  1. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Приветствую форумчане! Спасибо что вы есть!

    Вопрос следующий:

    Существуют правила для сохранения данных в БД представленных в виде массива. После прохождения валидации эти правила приобретают значения в виде файлов для записи в БД.

    PHP:
    1.  
    2.          foreach($rules->all() as $name => $value) {
    3.             foreach ($performer->photocontrol as $photocontrol) {
    4.                 $photocontrol->name = $name;
    5.                 $photocontrol->path = $request->file($name)->store('photocontrol');
    6.                 $photocontrol->status = PerformerPhotocontrol::STATUS_SENT;
    7.                 $photocontrol->save();
    8.             }
    9.          }
    Суть в том, что на выходе конечно же во все соответствующие значения в таблице записываются только последние значения. Как этого избежать?
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    Переформулируйте вопрос.
     
  3. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Спасибо, проблема была в том, что после отработки двойного цикла foreach сохранялись только последние значения, а нужно было сохранять все ключи из массива rules->all() после каждой итерации. Проблему решил с помощью объекта collection в Laravel следующим образом:

    Код (Text):
    1.      
    2. $keys = $rules->keys();
    3.  
    4.    $cnt = 0;
    5.         foreach ($performer->photocontrol as $photocontrol) {
    6.                 $photocontrol->name = $keys[$cnt];
    7.                 $photocontrol->path = $request->file($keys[$cnt])->store('photocontrol');
    8.                 $photocontrol->status = PerformerPhotocontrol::STATUS_SENT;
    9.                 $photocontrol->saveOrFail();
    10.                 $cnt++;
    11.          }