保存表单字段中的多个项目_ LARAVEL

snz8szmq  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(58)

我试图从同一个表单保存多个课程到数据库中。我这样做的方法是,我有一个表单,其中的字段具有相同的名称,就像这样。

<form class="form-group" action="{{route('save_courses')}}" method="POST" enctype="multipart/form-data"
      class="remove-empty-values">
    {{ csrf_field() }}
    <div class="form-group mt-4">
        <label for="exampleFormControlInput1">Category Title</label>
        <select name="cat_id" class="form-control">
            <option value="">Select Category</option>
            @foreach ($cats as $cat)
                <option value="{{$cat->id}}">{{$cat->title}}</option>
            @endforeach
        </select>
    </div>
    <div class="form-group mt-3">
        <label for="exampleFormControlInput1">Select Department</label>
        <select name="dept" class="form-control" id="">
            <option value="">Select Department</option>
            <option value="csc">Computer Science</option>
            <option value="mac">Mass Communication</option>
            <option value="bam">Business Administration</option>
            <option value="cet">Computer Engineering</option>
            <option value="eee">Electrical Electronics</option>
            <option value="Acc">Accountancy</option>
        </select>
    </div>
    <div class="form-group mt-3">
        <label for="exampleFormControlInput1">Select Semester</label>
        <select name="semester" class="form-control" id="">
            <option value="">Select Semeser</option>
            <option value="sem1">Semester 1</option>
            <option value="sem2">Semester 2</option>
            <option value="sem3">Semester 3</option>
            <option value="sem4">Semester 4</option>
            <option value="sem5">Semester 5</option>
            <option value="sem6">Semester 6</option>
        </select>
    </div>
    <div class="form-group mt-3">
        <label for="exampleFormControlInput1">Program</label>
        <select name="program" class="form-control" id="">
            <option value="">Select Program</option>
            <option value="ND">ND</option>
            <option value="HND">HND</option>
        </select>
    </div>
    <small>
        Courses attached below will be attached to above Semester, Department, and Program
    </small>
    <div class="mb-5">
        <div class="form-group">
            <label for="exampleFormControlInput1">Add Course</label>
            <input type="text" class="form-control" name="title[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Code</label>
            <input type="text" class="form-control" name="code[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Credit Unit</label>
            <input type="text" class="form-control" name="unit[]">
        </div>
    </div>
    <div class="mb-5">
        <div class="form-group">
            <label for="exampleFormControlInput1">Add Course</label>
            <input type="text" class="form-control" name="title[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Code</label>
            <input type="text" class="form-control" name="code[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Unit</label>
            <input type="text" class="form-control" name="unit[]">
        </div>
    </div>
    <div class="mb-5">
        <div class="form-group">
            <label for="exampleFormControlInput1">Add Course</label>
            <input type="text" class="form-control" name="title[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Code</label>
            <input type="text" class="form-control" name="code[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Unit</label>
            <input type="text" class="form-control" name="unit[]">
        </div>
    </div>
    <div class="mb-5">
        <div class="form-group">
            <label for="exampleFormControlInput1">Add Course</label>
            <input type="text" class="form-control" name="title[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Code</label>
            <input type="text" class="form-control" name="code[]">
        </div>
        <div class="form-group">
            <label for="exampleFormControlInput1">Course Unit</label>
            <input type="text" class="form-control" name="unit[]">
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-primary">Submit</button>
        </div>
    </div>
</form>

字符串
我尝试从每个字段创建新课程,名称为标题,并将保存代码和单元保存到我创建的每个课程。此外,我希望代码忽略未填充的字段组。
在我的控制器中,我这样做了,使用foreach:

$input = $request->all();

            $courses = [];
            
        foreach($request->title as $key => $value) {
            
                foreach($request->unit as $unit => $v){
                   
                    foreach($request->code as $code => $c){
                       if($value !== null && $v !== null && $c !== null){

               $course =[
                'cat_id' => $request->cat_id,
                'semester' => $request->semester,
                'program' => $request->program,
                'code' => $request->code,
                'unit' => $input['unit'][$unit],
                'code' => $input['code'][$code],
                'dept' => $request->dept,
                'title' => $input['title'][$key],
               ];

               array_push($courses, $course);
            }else{

                Alert::info('Oops', 'Something went wrong.');
            }

        }
    }
    }
       

        if($courses !== null){
        foreach($courses as $course){
            if(Course::insert($course)){

            Alert::success('Success', 'Successful!');
            }else{

                Alert::info('Oops', 'Something went wrong.');
            }
        }
    }else{
        Alert::info("Oops", "You didn't insert any course and almost ruined our db!");
    }
        

        // $save=Course::insert(title[]);
        return redirect()->back();
    

    }


表单插入到DB中并创建新字段。不幸的是,它也创建了已创建课程的副本。
有什么需要帮忙的吗?

e1xvtsh3

e1xvtsh31#

你有嵌套的循环来遍历“title”、“code”和“unit”数组,导致每个课程有多个插入。

public function saveCourses(Request $request)
{
    $input = $request->all();
    $courses = [];

    foreach ($input['title'] as $key => $title) {
        // Check if all required fields are present
        if (!empty($title) && !empty($input['code'][$key]) && !empty($input['unit'][$key])) {
            $course = [
                'cat_id' => $request->cat_id,
                'semester' => $request->semester,
                'program' => $request->program,
                'code' => $input['code'][$key],
                'unit' => $input['unit'][$key],
                'dept' => $request->dept,
                'title' => $title,
            ];

            $courses[] = $course;
        }
    }

    if (!empty($courses)) {
        Course::insert($courses);

        Alert::success('Success', 'Courses saved successfully!');
    } else {
        Alert::info('Oops', 'No valid courses to insert.');
    }

    return redirect()->back();
}

字符串

相关问题