如何正确更新只有一个标识ID的数组

时间:2019-10-10 19:23:38

标签: laravel

我正在尝试使用这样的对象更新数组,使用当前代码,我只保存了第一个,我知道这是问题所在,但我不知道如何解决

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 个答案:

答案 0 :(得分:1)

基本上,当您使用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循环,则不能保存$ options,因为您没有指定要保存在哪个集合实例中。