-2

I want to insert an array with an id : blade.php enter image description here

<tr>
<td class="text-left">{{$count}}</td>
<td class="text-left"><img src="{{ asset('/' . $data->image_file) }}" class="img-circle" width="35px" height="35px"/></td>
<td class="text-left">{{$data->student_id}}</td>
<td class="text-left">
    {{ App\Models\student_subject:: where('id', '=', $subject)->value('sub_name') }}
</td>

<td class="text-left"> <input type="text" class="form-control"  placeholder="Mark" name="sub_mark[]" max="100" data-parsley-max="100" required="" data-parsley-required-message ="Subject Mark is required" data-parsley-trigger="change focusout"> </td>

<td class="text-left"> <input type="text" class="form-control" placeholder="Class Test Mark" name="ct_mark[]" max="20" data-parsley-max="20" required="" data-parsley-required-message ="CT Mark is required" data-parsley-trigger="change focusout"> </td>

you can see all code in here enter link description here

when I tried to submit the form , it insert rows with same id.. enter image description here

here is my controller

public function PostAddResult(Request $request) {
$student_id= $request->input('student_id');
$sub_name= $request->input('sub_name');
$class_name= Session::get('class_name');
$exam_id= Session::get('exam_name');

$sub_mark= $request->input('sub_mark');
$ct_mark= $request->input('ct_mark');

 $i = 0;
 foreach($sub_mark as $marks){

    $student_res = new student_results();
    $student_res->student_id = $student_id;
    $student_res->class_name = $class_name;
    $student_res->sub_name = $sub_name;
    $student_res->sub_mark = $marks;
    $student_res->ct_mark = $ct_mark[$i];
    $student_res->exam_id = $exam_id;
    $student_res->save();

 }

 $notification = array(
            'message'=>'Student Marks Add Successfully',
            'alert-type'=>'success',
        );

return redirect('/addResult')->with($notification);

}
mega6382
  • 9,211
  • 17
  • 48
  • 69
Nesar
  • 21
  • 5

1 Answers1

0

You want to get separate student IDs and subject names for each record, so change this:

<input type="hidden" name="student_id" value="{{ $data->student_id }}">
<input type="hidden" name="sub_name" value="{{ $subject }}">

To:

<input type="hidden" name="student_id[]" value="{{ $data->student_id }}">
<input type="hidden" name="sub_name[]" value="{{ $subject }}">

Then you'll be able to iterate over marks, subject names and student IDs:

for ($i = 0; $i < count($sub_mark); $i++) {
    $student_res = new student_results();
    $student_res->student_id = $student_id[$i];
    $student_res->class_name = $class_name;
    $student_res->sub_name = $sub_name[$i];
    $student_res->sub_mark = $sub_mark[$i];
    $student_res->ct_mark = $ct_mark[$i];
    $student_res->exam_id = $exam_id;
    $student_res->save();
 }
Alexey Mezenin
  • 158,981
  • 26
  • 290
  • 279
  • `Model::insert()` would be better to insert multiple rows – Niklesh Raut Dec 09 '17 at 15:06
  • @user2486 [I totally agree](https://stackoverflow.com/questions/41871287/batch-insert-in-laravel-5-2), but that's not related to the question. I mean let OP learn the basics first, then he'll be able to move on to [the best practices](https://github.com/alexeymezenin/laravel-best-practices). – Alexey Mezenin Dec 09 '17 at 15:09
  • @Alexey Mezenin - for ($i = 0; $i < count($sub_mark)) this line has error-- Parse error: syntax error, unexpected ')', expecting ';' – Nesar Dec 09 '17 at 15:14
  • @Nesar oh yeah, sorry. Fixed. – Alexey Mezenin Dec 09 '17 at 15:17