Как правильно обновить массив, который имеет только один идентифицирующий идентификатор - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь обновить массив с объектами внутри чего-то вроде этого, с текущим кодом, который у меня есть, он сохраняет только первый, я знаю, что это проблема, но я не знаю, как это исправить

array (
    0 => 
    array (
      'option' => 'new',
    ),
    1 => 
    array (
      'option' => 'ewrwer',
    ),
  ),

Это мой текущий код, речь идет о

$option = SurveyQuestionOption::where('survey_question_id', $preg->id)->first();

Как это исправить, чтобы он циклически проходил по всему массиву questionOptions, а не простопервый? Я пытался ->get(), но тогда ->save() не работает.

public function update(Request $request, $id)
{
    DB::beginTransaction();
    $preg = SurveyQuestion::findOrFail($id);
    $preg->question = $request->question;
    $preg->survey_section_id = $request->survey_section_id;
    $preg->response_type_id = $request->response_type_id;
    $preg->optional = $request->optional;
    $preg->save();

    $ids = [];
    if ($request->get('questionOptions')) {
        foreach ($request->get('questionOptions') as $item) {
            $option = SurveyQuestionOption::where('survey_question_id', $preg->id)->first();

            if (empty($option)) {
                $option = new SurveyQuestionOption();
                $option->survey_question_id = $preg->id;
            }

            $option->option = $item['option'];
            $option->save();
        }
    }
    if (count($ids) > 0) {
        SurveyQuestionOption::whereNotIn('id', $ids)->where('survey_question_id', $preg->id)->delete();
        }

    DB::commit();
    return back();
}

1 Ответ

1 голос
/ 11 октября 2019

По сути, когда вы используете get, вы получаете коллекцию, поэтому вы не можете использовать save на ней. вам нужно сделать цикл foreach и сохранить в нем. то есть;нравится;

$options = SurveyQuestionOption::where('survey_question_id', $preg->id)->get();
foreach($options as $option){
   if (empty($option)) {
      $option = new SurveyQuestionOption();
      $option->survey_question_id = $preg->id;
   }

   $option->option = $item['option'];
   $option->save();
}

Обратите внимание, что вы не можете сохранить параметры $, если не используете цикл foreach, поскольку вы не указываете, в каком экземпляре коллекции его сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...