代码之家  ›  专栏  ›  技术社区  ›  Nancy

如何检查数组中的项是否已被删除并将其删除?

  •  0
  • Nancy  · 技术社区  · 5 年前

    这是我更新的代码

    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();
    
        if ($request->get('questionOptions')) {
            foreach ($request->get('questionOptions') as $item) {
                $opts = [];
                if (empty($item['id'])) {
                    $option = new SurveyQuestionOption();
                    $option->survey_question_id = $preg->id;
    
                    $opts[] = $item['id'];
                } else if (!empty($item['id'])) {
                    $option = SurveyQuestionOption::findOrFail($item['id']);
    
                    $opts[] = $item['id'];
                } 
                $option->option = $item['option'];
                $option->save();
            }
        }
    
        DB::commit();
        return back();
    }
    

    目前,我没有检查它是否被删除,因为就像我说的,我不确定如何删除,我的想法是创建一个数组,存储正在创建或编辑的数组的ID,并以某种方式使用它来与从vue发送到控制器的选项数组进行比较。不知道这是多么可行,任何帮助是感激的。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Nancy    5 年前

    这就是我找到的解决办法

    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) {
                if (empty($item['id'])) {
                    $option = new SurveyQuestionOption();
                    $option->survey_question_id = $preg->id;
                 } else if (!empty($item['id'])) {
                    $option = SurveyQuestionOption::findOrFail($item['id']);
                }
                $option->option = $item['option'];
                $option->save();
                $ids[] = $option['id'];
            }
        }
        if (count($ids) > 0) {
            SurveyQuestionOption::whereNotIn('id', $ids)->where('survey_question_id', $preg->id)->delete();
        }
    
        DB::commit();
        return back();
    }