Applying one-to-many relationship in the database using Laravel
Steps
1. Create a migration file for adding a new table students
php artisan make:migration create_table_students
2. Add the following code in the up function
Schema::create('students', function(Blueprint $table)
{
$table->integer('id')->primary();
$table->string('name');
$table->text('email');
$table->string('course');
$table->boolean('done')->default(false);
$table->timestamps();
});
3. Create a migration file for adding a new table subjects
php artisan make:migration create_table_subjects
4. Add the following code in the up function
Schema::create('subjects', function(Blueprint $table)
{
$table->integer('module');
$table->integer('student_id');
$table->foreign('student_id')->unsigned()->references('id')->on('students')->onDelete('cascade');
$table->text('subject_name');
$table->primary(array('module','student_id'));
$table->timestamps();
});
5. Add Student and Subject Model
php artisan make:model Student
php artisan make:model Subject
6. Run the migrate command
php artisan migrate
7. To define one-to-many relationship,
Edit the Student model and add the following code
public function subjects()
{
return $this->hasMany('todoparrot\Subject');
}
8. Add the following code in Subject model
public function students()
{
return $this->belongsTo('todoparrot\Student');
}
9. Add the following code in the SubjectController,
use todoparrot\Student;
use todoparrot\Subject;
public function index()
{
$list = Student::find(1);
$sub = new Subject;
$sub->module = 103;
$sub->student_id = 01;
$sub->subject_name = 'PHP';
$list->subjects()->save($sub);
$sub = new Subject;
$sub->module = 104;
$sub->student_id = 01;
$sub->subject_name = 'AngularJS';
$list->subjects()->save($sub);
}
10. Add a record in students table and add the following code in the controller
public function show($id)
{
$list = Student::find($id);
return view('show')->with('list', $list);
}
11. Add route to call index and show method.
12. Create a new view file under named show.blade.php
13. Add the following code in the view file
<h2> Student ID: {{ $list->student_id }} <br /> Student Name: {{ $list->name }} </h2>
<h3> Subjects </h3>
@if ($list->subjects->count() > 0)
@foreach ($list->subjects as $subject)
<li>{{ $subject->subject_name }} </li>
@endforeach
@else
No subject is assigned for this student
@endif
The steps are shown in the following video tutorial.
Good Luck