我正在尝试使用这样的对象更新数组,使用当前代码,我只保存了第一个,我知道这是问题所在,但我不知道如何解决
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();
}
答案 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,因为您没有指定要保存在哪个集合实例中。