How to store Multidimensional array in Database - using laravel 5.8

HassanNajmul :

I want to save students course information into database courses table. Student can add multiple course, class time and section at a time using a form. Here is details of courses table:

**id, 
nsu_id
course,
section,
class_start,
class_end**

Form (View)

            <form method="POST" action="/store">
            @csrf
            {{-- clone start from here --}}  
                <div class="parent">
                    <div id="form-set">
                        <div class="form-group row">
                            <label for="course" class="col-md-4 col-form-label text-md-right">{{ __('Course & Section') }}</label>

                            <div class="col-md-3">
                                <select type="text" class="form-control" name="course[]">
                                    <option>Course</option>
                                    <option>cse 115</option>
                                    <option>cse 215</option>
                                    <option>cse 311</option>
                                    <option>cse 411</option>
                                </select>
                            </div>
                            <div class="col-md-3">
                                <select type="number" class="form-control" name="section[]">
                                    <option>Section</option>
                                    <option>1</option>
                                    <option>2</option>
                                    <option>3</option>
                                    <option>4</option>
                                </select>
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="Class Timing" class="col-md-4 col-form-label text-md-right">{{ __('Class Timing') }}</label>

                            <div class="col-md-3">
                                <select type="text" class="form-control" name="class_start[]">
                                    <option>Start</option>
                                    <option>08:00 AM</option>
                                    <option>09:40 AM</option>
                                    <option>11:20 AM</option>
                                    <option>01:00 PM</option>
                                    <option>02:40 PM</option>
                                    <option>04:20 PM</option>
                                </select>
                            </div>
                            <div class="col-md-3">
                                <select type="text" class="form-control" name="class_end[]" >
                                    <option>End</option>
                                    <option>9:30</option>
                                    <option>11:10</option>
                                    <option>12:50</option>
                                    <option>2:30</option>
                                    <option>4:10</option>
                                    <option>5:50</option>
                                </select>
                            </div>
                        </div>

                    </div>
                </div>
                <div class="form-group row justify-content-center"  style="margin-top: -11%">
                    <div class="col-md-10" style="visibility: hidden"></div>
                    <div class="col-md-2">
                        <button class="btn btn-xs btn-success" id="add">Add</button>
                    </div>
                </div>
                <script type="text/javascript">
                    $(document).ready(function () {
                        $('#add').click(function(e) {
                            e.preventDefault();
                            $("#form-set").clone().appendTo(".parent");
                        });
                    });
                </script>
           {{-- Clone end here --}}

                <div class="form-group row">
                    <label for="nsu_id" class="col-md-4 col-form-label text-md-right">{{ __('NSU ID') }}</label>

                    <div class="col-md-6">
                        <input type="number" required class="form-control" name="nsu_id"  placeholder="Exp. 1520836042">
                    </div>
                </div>

                <div class="form-group row mb-0">
                    <div class="col-md-6 offset-md-4">
                        <button type="submit" class="btn btn-primary">
                            {{ __('Register') }}
                        </button>
                    </div>
                </div>
            </form>

Model

class Course extends Model
{
  protected $table='courses';
  protected $fillable=[
    'nsu_id','course','section','class_start','class_end'
  ];

}

Migration

public function up()
{
    Schema::create('courses', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('nsu_id');
        $table->string('course');
        $table->integer('section');
        $table->string('class_start');
        $table->string('class_end');
        $table->timestamps();
    });
}

This is what I have done to controller and i am getting Array to string conversion exception.


    public function store(Request $request)
    {
     $data[]=$request->all();
     //dd($data);
     $courseData=[];
     foreach($data as $data){
         $pointData[]=[
             'nsu_id'=>$data['nsu_id'],
             'course'=>$data['course'],
             'section'=>$data['section'],
             'class_start'=>$data['class_start'],
             'class_end'=>$data['class_end'],
         ];
     }
     DB::table('courses')->insert($courseData);

     return redirect()->to('/home');
    }

When i am trying get the value using helper function dd($data);


    array:1 [▼
      0 => array:6 [▼
        "_token" => "2AspZiawULQy4fMikkBTRzjvUxPVnZPPonJrZAUy"
        "course" => array:2 [▼
          0 => "cse 115"
          1 => "cse 215"
        ]
        "section" => array:2 [▼
          0 => "1"
          1 => "2"
        ]
        "class_start" => array:2 [▼
          0 => "08:00 AM"
          1 => "09:40 AM"
        ]
        "class_end" => array:2 [▼
          0 => "9:30"
          1 => "11:10"
        ]
        "nsu_id" => "1520836042"
      ]
    ]

Error: Array to string conversion (SQL: insert into courses (class_end, class_start, course, nsu_id, section) values (9:30, 08:00 AM, cse 115, 1520836042, 1))

Any kind of help will be highly appreciated

HassanNajmul :

After taking a lot of time, i am successfully solve my own problem in a different way. Thanks @mchljams for all his kind assistance and cooperation.

            $nsu_id=$request->nsu_id;
            if (count($request->course)>0) {
                foreach($request->course as $item => $value)
                    $data[$value]=array(
                        'nsu_id'=>$nsu_id,
                        'course'=>$request->course[$item],
                        'section'=>$request->section[$item],
                        'class_start'=>$request->class_start[$item],
                        'class_end'=>$request->class_end[$item],
                    );
                    Course::insert($data);
            }

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=402001&siteId=1
Recommended