DEV Community

Vicky Alvando
Vicky Alvando

Posted on

Online Test - Create Model And Migration #2

Step 1 - Create Model & Migration Lesson

php artisan make:model Lesson -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('lessons', function (Blueprint $table) {
        $table->id();
        $table->string('title')->unique();
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Lesson.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Lesson extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'title',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 2 - Create Model & Migration Classroom

php artisan make:model Classroom -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('classrooms', function (Blueprint $table) {
        $table->id();
        $table->string('title')->unique();
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Classroom.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Classroom extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'title',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 3 - Create Model & Migration Exam

php artisan make:model Exam -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('exams', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->foreignId('lesson_id')->references('id')->on('lessons')->cascadeOnDelete();
        $table->foreignId('classroom_id')->references('id')->on('classrooms')->cascadeOnDelete();
        $table->integer('duration');
        $table->text('description');
        $table->enum('random_question', ['Y', 'N'])->default('Y');
        $table->enum('random_answer', ['Y', 'N'])->default('Y');
        $table->enum('show_answer', ['Y', 'N'])->default('N');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Exam.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Exam extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'title',
        'lesson_id',
        'classroom_id',
        'duration',
        'description',
        'random_question',
        'random_answer',
        'show_answer',
    ];

    /**
     * lesson
     *
     * @return void
     */
    public function lesson()
    {
        return $this->belongsTo(Lesson::class);
    }

    /**
     * classroom
     *
     * @return void
     */
    public function classroom()
    {
        return $this->belongsTo(Classroom::class);
    }

    /**
     * questions
     *
     * @return void
     */
    public function questions()
    {
        return $this->hasMany(Question::class)->orderBy('id', 'DESC');
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 4 - Create Model & Migration Student

php artisan make:model Student -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('students', function (Blueprint $table) {
        $table->id();
        $table->foreignId('classroom_id')->references('id')->on('classrooms')->cascadeOnDelete();
        $table->bigInteger('nisn')->unique();
        $table->string('name');
        $table->string('password');
        $table->enum('gender', ['L', 'P'])->default('L');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Student.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'classroom_id',
        'nisn',
        'name',
        'password',
        'gender'
    ];  

    /**
     * classroom
     *
     * @return void
     */
    public function classroom()
    {
        return $this->belongsTo(Classroom::class);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 5 - Create Model & Migration Question

php artisan make:model Question -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('questions', function (Blueprint $table) {
        $table->id();
        $table->foreignId('exam_id')->references('id')->on('exams')->cascadeOnDelete();
        $table->text('question');
        $table->text('option_1')->nullable();
        $table->text('option_2')->nullable();
        $table->text('option_3')->nullable();
        $table->text('option_4')->nullable();
        $table->text('option_5')->nullable();
        $table->integer('answer');  
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Question.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Question extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'exam_id',
        'question',
        'option_1',
        'option_2',
        'option_3',
        'option_4',
        'option_5',
        'answer',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 6 - Create Model & Migration Exam Session

php artisan make:model ExamSession -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('exam_sessions', function (Blueprint $table) {
        $table->id();
        $table->foreignId('exam_id')->references('id')->on('exams')->cascadeOnDelete();
        $table->string('title');
        $table->dateTime('start_time');
        $table->dateTime('end_time');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/ExamSession.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ExamSession extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'exam_id',
        'title',
        'start_time',
        'end_time',
    ];

    /**
     * exam_groups
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function exam_groups()
    {
        return $this->hasMany(ExamGroup::class);
    }

    /**
     * exam
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function exam()
    {
        return $this->belongsTo(Exam::class);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 7 - Create Model & Migration Exam Group

php artisan make:model ExamGroup -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('exam_groups', function (Blueprint $table) {
        $table->id();
        $table->foreignId('exam_id')->references('id')->on('exams')->cascadeOnDelete();
        $table->foreignId('exam_session_id')->references('id')->on('exam_sessions')->cascadeOnDelete();
        $table->foreignId('student_id')->references('id')->on('students')->cascadeOnDelete();
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/ExamGroup.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ExamGroup extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'exam_id',
        'exam_session_id',
        'student_id',
    ];

    /**
     * exam
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function exam()
    {
        return $this->belongsTo(Exam::class);
    }

    /**
     * exam_session
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function exam_session()
    {
        return $this->belongsTo(ExamSession::class);
    }

    /**
     * student
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function student()
    {
        return $this->belongsTo(Student::class);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 8 - Create Model & Migration Answer

php artisan make:model Answer -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('answers', function (Blueprint $table) {
        $table->id();
        $table->foreignId('exam_id')->references('id')->on('exams')->cascadeOnDelete();
        $table->foreignId('exam_session_id')->references('id')->on('exam_sessions')->cascadeOnDelete();
        $table->foreignId('question_id')->references('id')->on('questions')->cascadeOnDelete();
        $table->foreignId('student_id')->references('id')->on('students')->cascadeOnDelete();
        $table->integer('question_order');
        $table->string('answer_order');
        $table->integer('answer');
        $table->enum('is_correct', ['Y', 'N'])->default('N');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Answer.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Answer extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'exam_id',
        'exam_session_id',
        'question_id',
        'student_id',
        'question_order',
        'answer_order',
        'answer',
        'is_correct',
    ];

    /**
     * question
     *
     * @return void
     */
    public function question()
    {
        return $this->belongsTo(Question::class);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 9 - Create Model & Migration Grade

php artisan make:model Grade -m
Enter fullscreen mode Exit fullscreen mode

Please open the migration file, then in the section function up change the code to be like this:

public function up()
{
    Schema::create('grades', function (Blueprint $table) {
        $table->id();
        $table->foreignId('exam_id')->references('id')->on('exams')->cascadeOnDelete();
        $table->foreignId('exam_session_id')->references('id')->on('exam_sessions')->cascadeOnDelete();
        $table->foreignId('student_id')->references('id')->on('students')->cascadeOnDelete();
        $table->integer('duration');
        $table->dateTime('start_time')->nullable();
        $table->dateTime('end_time')->nullable();
        $table->integer('total_correct');
        $table->decimal('grade', 5, 2);
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Please open the file app/Models/Grade.php, then change the code to be like this:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Grade extends Model
{
    use HasFactory;

    /**
     * fillable
     *
     * @var array
     */
    protected $fillable = [
        'exam_id',
        'exam_session_id',
        'student_id',
        'duration',
        'start_time',
        'end_time',
        'total_correct',
        'grade',
    ];

    /**
     * exam
     *
     * @return void
     */
    public function exam()
    {
        return $this->belongsTo(Exam::class);
    }

    /**
     * exam_session
     *
     * @return void
     */
    public function exam_session()
    {
        return $this->belongsTo(ExamSession::class);
    }

    /**
     * student
     *
     * @return void
     */
    public function student()
    {
        return $this->belongsTo(Student::class);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 10 - Running the migration
After successfully creating the Model and Migration, now we will run the migrate command so tah the code tah we created above can be generated into tables, filds and relations.

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

Top comments (0)