cnayak
cnayak

Reputation: 251

Storing data to multiple tables from single form in laravel

My schemas are:

Schema::create('persons', function (Blueprint $table) {
        $table->bigInteger('university_id')->unique()->unsigned();
        $table->string('category');
        $table->string('name');
        $table->timestamps();
  });

Schema::create('teachers', function (Blueprint $table) {
        $table->increments('teacher_id');
        $table->bigInteger('university_id')->unsigned();
        $table->string('position');
        $table->string('courses');
        $table->integer('salary');
        $table->timestamps();
  });

Schema::create('students', function (Blueprint $table) {
        $table->increments('student_id');
        $table->bigInteger('university_id')->unsigned();
        $table->string('year');
        $table->string('semester');
        $table->string('programme');
        $table->integer('rollNum');
        $table->timestamps();
  });

I have a two forms with fields:

I tried to store data in the database through my controller in single method as follows: After requesting all data into variables from form, I tried to store data in the following way.

University::create([
     'university_id' =>$universityID,
     'category' => $category,
     'name' => $name
 ]);

//I passed values of category as Teacher when submitting from teacher form 
//and Student while submitting student form.

if($category == 'Teacher'){
  Teacher::create([
    'university_id' => $universityID,
    'position' => $position,
    'courses' => $course,
    'salary' => $salary
  ]);
}

  if($category == 'Student'){
     Student::create([
       'university_id' => $universityID,
       'year' => $year,
       'semester' => $semester,
       'programme' => $programme,
       'rollNum' => $roll
     ]);
}

When i submitted Teacher's form, I was expecting that data will be stored in University and Teachers table only and it did. But there was an unexpected problem occurred. The Student table was filled with Null values. I was expecting if condition will prevent running Student::create([]) So how can I store values only in University and Teachers table when submitting from teachers form and University and Students table only when submitting from students form without having null values in either of them.

Upvotes: 0

Views: 2587

Answers (1)

imrealashu
imrealashu

Reputation: 5099

Instead of using like this, simple would be use if and else statements and that would do the job.

Example:

$university = University::create([
     'university_id' =>$universityID,
     'category' => $category,
     'name' => $name
 ]);

if($category == 'Teacher') {
    Teacher::create([
        'university_id' => $university->id,
        'position' => $position,
        'courses' => $course,
        'salary' => $salary
    ]);
else if($category == 'Student') {
    Student::create([
       'university_id' => $university->id,
       'year' => $year,
       'semester' => $semester,
       'programme' => $programme,
       'rollNum' => $roll
   ]);
}else{
    //Unknown Category name
}

Let me know if that works for you. The way I see it's very simple and straight forward.

Upvotes: 1

Related Questions