Tutorial Laravel Livewire - #4 - Membuat Schema Database Dengan Laravel

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah schema database yang nantinya akan kita gunakan pada study case kali ini dan kita akan memanfaatkan model dan migration dari laravel.

Rafi Taufiqurrahman
Dipublish 09/07/2024

Pendahuluan

Setelah berhasil melakukan installasi project dan starter-kit yang akan kita gunakan, disini kita akan lanjutkan untuk membuat schema database terlebih dahulu, kurang lebih schema database yang akan kita gunakan seperti berikut ini :

Catatan : kita akan membuat schema database diatas menggunakan laravel migration

Karena menggunakan Laravel, maka untuk struktur table dan relasi kita tidak perlu membuatnya secara manual didalam database, karena kita akan memanfaatkan fitur yang telah disediakan oleh Laravel itu sendiri yaitu Migration dan untuk relasi antar table kita akan menggunakan fitur Eloquent Relationships.

design-database

Sesuai gambar diatas, berikut ini relasi antar tabel yang akan kita gunakan nanti :

  1. One To Many (belongsTo) - antara table products dan categories.
  2. One To Many (belongsTo) - antara table transaction_details dan transactions.
  3. One To Many (belongsTo) - antara table transaction_details dan products.
  4. One To Many (belongsTo) - antara table transactions dan users.
  5. One To Many (belongsTo) - antara table carts dan users.
  6. One To Many (belongsTo) - antara table carts dan products.

Setelah mengetahui apa saja yang kita perlukan disini kita akan lanjutkan untuk membuat Migration dan Model Terlebih dahulu.

Model & Migration Category

Silahkan teman-teman buka terminal-nya, kemudian jalankan perintah berikut ini :

Terminal
php artisan make:model Category -m

Jika perintah diatas berhasil dijalankan, maka kita akan dibuatkan sebuah model baru dengan nama Category. Kemudian, kita tambahkan flag -m, yang artinya kita juga akan membuat sebuah file baru sesuai dengan nama modelnya yaitu category akan tetapi nama migration-nya akan otomatis dibuatkan dalam bentuk plural.

Jika teman - teman perhatikan setelah menjalankan perintah diatas, kita akan mendapatkan 2 buah file baru yang terletak di :

  1. app/Models/Category.php
  2. database/migration/2024_06_19_135520_create_categories_table.php

Informasi : untuk nama file migration akan digenerate berdasarkan tanggal pembuatannya.

Selanjutnya kita akan menambahkan beberapa attribute baru didalam file migration categories, silahkan teman - teman buka filenya kemudian ubah kodenya menjadi seperti berikut ini :

2024_06_19_135520_create_categories_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('slug');
            $table->string('image');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('categories');
    }
};

Dari perubahan kode diatas, kita menambahan beberapa attribute baru didalam function up, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUTE TYPE DATA
name string
slug string
image string

Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang kita lanjutkan untuk menambahkaan mass assigment di dalam file model, tujuannya agar attribute yang sudah kita tambahkan diatas dapat melakukan manipulasi data, seperti proses insert, update dan delete.

Silahkan teman - teman buka file app/Models/Category.php, kemudian masukan kode berikut ini :

Category.php
<?php

namespace App\Models;

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

class Category extends Model
{
    use HasFactory;

    /**
     * fillable
     */
    protected $fillable = ['name', 'slug', 'image'];
}

Dari perubahan kode di atas, kita menambahkan properti baru dengan nama $fillable, dimana berisi attribute yang sudah kita buat sebelumnya di dalam migration categories.

Model & Migration Product

Setelah berhasil membuat model dan migration category, disini kita akan lanjutkan untuk membuat model dan migration product. Silahkan teman - teman buka terminal-nya lagi dan jalankan perintah berikut ini :

Terminal
php artisan make:model Product -m

Setelah berhasil menjalankan perintah diatas, kita akan mendapatkan 2 buah file baru dengan nama :

  1. app/Models/Product.php
  2. database/migration/2024_06_19_143351_create_products_table.php

Selanjutnya kita akan menambahkan beberapa attribute baru didalam file migration products, silahkan teman - teman buka filenya kemudian ubah kodenya menjadi seperti berikut ini :

2024_06_19_143351_create_products_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('slug');
            $table->foreignId('category_id')->constrained('categories');
            $table->string('image');
            $table->integer('quantity');
            $table->double('price');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

Dari perubahan kode diatas, kita menambahan beberapa attribute baru didalam function up, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUTE TYPE DATA
name string
slug string
category_id foreignId
image string
quantity integer
price double

Pada kode diatas, kita juga menambahkan sebuah kolom relasi dari tabel products ke tabel categories.

$table->foreignId('category_id')->constrained('categories');

Kode diatas artinya attribute category_id merupakan foreign key dari table categories attribute id.

Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang kita lanjutkan untuk menambahkaan mass assigment di dalam file model, tujuannya agar attribute yang sudah kita tambahkan diatas dapat melakukan manipulasi data, seperti proses insert, update dan delete.

Silahkan teman - teman buka file app/Models/Product.php, kemudian masukan kode berikut ini :

Product.php
<?php

namespace App\Models;

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

class Product extends Model
{
    use HasFactory;

    /**
     * fillable
     */
    protected $fillable = ['name', 'slug', 'category_id', 'image', 'quantity', 'price'];
}

Dari perubahan kode di atas, kita menambahkan properti baru dengan nama $fillable, dimana berisi attribute yang sudah kita buat sebelumnya di dalam migration products.

Model & Migration Cart

Pada tahap ini kita akan lanjutkan untuk pembuatan model dan migration cart. Silahkan teman - teman buka terminal-nya lagi dan jalankan perintah berikut ini :

Terminal
php artisan make:model Cart -m

Setelah berhasil menjalankan perintah diatas, kita akan mendapatkan 2 buah file baru dengan nama :

  1. app/Models/Cart.php
  2. database/migration/2024_06_19_150351_create_carts_table.php

Selanjutnya kita akan menambahkan beberapa attribute baru didalam file migration carts, silahkan teman - teman buka filenya kemudian ubah kodenya menjadi seperti berikut ini :

2024_06_19_150351_create_carts_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('carts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained('users');
            $table->foreignId('product_id')->constrained('products');
            $table->integer('quantity');
            $table->double('price');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('carts');
    }
};

Dari perubahan kode diatas, kita menambahan beberapa attribute baru didalam function up, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUTE TYPE DATA
user_id foreignId
product_id foreignId
quantity integer
price dobule

Pada kode diatas, kita juga menambahkan beberapa kolom relasi diantaranya :

  1. relasi dari tabel carts ke tabel users

     $table->foreignId('user_id')->constrained('users');
    
  2. relasi dari tabel carts ke table products

     $table->foreignId('product_id')->constrained('products');
    

Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang kita lanjutkan untuk menambahkaan mass assigment di dalam file model, tujuannya agar attribute yang sudah kita tambahkan diatas dapat melakukan manipulasi data, seperti proses insert, update dan delete.

Silahkan teman - teman buka file app/Models/Cart.php, kemudian masukan kode berikut ini :

Cart.php
<?php

namespace App\Models;

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

class Cart extends Model
{
    use HasFactory;

    /**
     * fillable
     */
    protected $fillable = ['user_id', 'product_id', 'quantity', 'price'];
}

Dari perubahan kode di atas, kita menambahkan properti baru dengan nama $fillable, dimana berisi attribute yang sudah kita buat sebelumnya di dalam migration carts.

Model & Migration Transaction

Pada tahap ini kita akan lanjutkan untuk pembuatan model dan migration transaction. Silahkan teman - teman buka terminal-nya lagi dan jalankan perintah berikut ini :

Terminal
php artisan make:model Transaction -m

Setelah berhasil menjalankan perintah diatas, kita akan mendapatkan 2 buah file baru dengan nama :

  1. app/Models/Transaction.php
  2. database/Migration/2024_06_19_151510_create_transactions_table.php

Selanjutnya kita akan menambahkan beberapa attribute baru didalam file migration transactions, silahkan teman - teman buka filenya kemudian ubah kodenya menjadi seperti berikut ini :

2024_06_19_151510_create_transactions_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('transactions', function (Blueprint $table) {
            $table->id();
            $table->string('invoice');
            $table->foreignId('user_id')->constrained('users');
            $table->double('grand_total');
            $table->double('cash');
            $table->double('change');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('transactions');
    }
};

Dari perubahan kode diatas, kita menambahan beberapa attribute baru didalam function up, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUTE TYPE DATA
invoice string
user_id foreignId
grand_total double
cash double
change dobule

Pada kode diatas, kita juga menambahkan sebuah kolom relasi dari tabel transactions ke tabel users.

$table->foreignId('user_id')->constrained('users');

Kode diatas artinya attribute user_id merupakan foreign key dari table users attribute id.

Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang kita lanjutkan untuk menambahkaan mass assigment di dalam file model, tujuannya agar attribute yang sudah kita tambahkan diatas dapat melakukan manipulasi data, seperti proses insert, update dan delete.

Silahkan teman - teman buka file app/Models/Transaction.php, kemudian masukan kode berikut ini :

Transaction.php
<?php

namespace App\Models;

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

class Transaction extends Model
{
    use HasFactory;

    /**
     * fillable
     */
    protected $fillable = ['invoice', 'user_id', 'grand_total', 'cash', 'change'];
}

Dari perubahan kode di atas, kita menambahkan properti baru dengan nama $fillable, dimana berisi attribute yang sudah kita buat sebelumnya di dalam migration transactions.

Model & Migration TransactionDetails

Setelah berhasil membuat model dan migration transaction, tahap ini merupakan tahap terakhir kita dalam pembuatan model dan migration, dikarenkan untuk model dan migration users, laravel telah mengeneratkan-nya untuk kita saat aplikasi pertama kali kita install. Disini kita akan lanjutkan untuk membuat model dan migration transaction_details. Silahkan teman - teman buka terminal-nya lagi dan jalankan perintah berikut ini :

Terminal
php artisan make:model TransactionDetail -m

Setelah berhasil menjalankan perintah diatas, kita akan mendapatkan 2 buah file baru dengan nama :

  1. app/Models/TransactionDetail.php
  2. database/Migration/2024_06_19_153155_create_transaction_details_table.php

Selanjutnya kita akan menambahkan beberapa attribute baru didalam file migration transaction_details, silahkan teman - teman buka filenya kemudian ubah kodenya menjadi seperti berikut ini :

2024_06_19_153155_create_transaction_details_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('transaction_details', function (Blueprint $table) {
            $table->id();
            $table->foreignId('transaction_id')->constrained('transactions');
            $table->foreignId('product_id')->constrained('products');
            $table->integer('quantity');
            $table->double('price');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('transaction_details');
    }
};

Dari perubahan kode diatas, kita menambahan beberapa attribute baru didalam function up, kurang lebih penjelasannya seperti berikut ini :

ATTRIBUTE TYPE DATA
transaction_id foreignId
product_id foreignId
quantity double
price double

Pada kode diatas, kita juga menambahkan beberapa kolom relasi diantaranya :

  1. relasi dari tabel transaction_details ke tabel transaction

     $table->foreignId('transaction_id')->constrained('transactions');
    
  2. relasi dari tabel transaction_details ke table products

     $table->foreignId('product_id')->constrained('products');
    

Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang kita lanjutkan untuk menambahkaan mass assigment di dalam file model, tujuannya agar attribute yang sudah kita tambahkan diatas dapat melakukan manipulasi data, seperti proses insert, update dan delete.

Silahkan teman - teman buka file app/Models/TransactionDetail.php, kemudian masukan kode berikut ini :

TransactionDetail.php
<?php

namespace App\Models;

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

class TransactionDetail extends Model
{
    use HasFactory;

    /**
     * fillable
     */
    protected $fillable = ['transaction_id', 'product_id', 'quantity', 'price'];
}

Dari perubahan kode di atas, kita menambahkan properti baru dengan nama $fillable, dimana berisi attribute yang sudah kita buat sebelumnya di dalam migration transaction_details.

Penutup

Pada artikel kali ini kita telah berhasil membuat schema database menggunakan laravel model & migration , selanjutnya kita akan membuat relasi antar tabel menggunakan eloquent relationships.

Series Artikel

Berikut ini daftar series artikel dari Tutorial Point of Sales Laravel, Livewire, Alpine.js & Tailwind Css

1
Tutorial Laravel Livewire - #1 - Project Overview

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan bahasa teknologi apa saja yang kita gunakan dan scope dari project yang akan kita bangun.

2
Tutorial Laravel Livewire - #2 - Installasi Project Laravel

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan mulai melakukan installasi project laravel kita dari awal menggunakan composer.

3
Tutorial Laravel Livewire - #3 - Installasi Laravel Breeze & Livewire

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan melakukan installasi laravel breeze dan livewire sebagai starter-kit kita.

4
Tutorial Laravel Livewire - #4 - Membuat Schema Database Dengan Laravel

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah schema database yang nantinya akan kita gunakan pada study case kali ini dan kita akan memanfaatkan model dan migration dari laravel.

5
Tutorial Laravel Livewire - #5 - Membuat Relasi Antar Table Dengan Laravel

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat relasi antar tabel menggunakan eloquent relationship yang telah disedikan oleh laravel.

6
Tutorial Laravel Livewire - #6 - Memanfaatkan Salah Satu Magic Laravel Yaitu Eloquent Accessor

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan mengenal salah satu magic laravel yang sangat powerfull yaitu laravel accessor.

7
Tutorial Laravel Livewire - #7 - Membuat Reusable Component Dengan Laravel

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita membuat sebuah reusable component menggunakan laravel.

8
Tutorial Laravel Livewire - #8 - Membuat Module Category Dengan Livewire

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah module category dengan livewire.

9
Tutorial Laravel Livewire - #9 - Membuat Module Product Dengan Livewire

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah module product dengan livewire.

10
Tutorial Laravel Livewire - #10 - Membuat Module POS Dengan Livewire

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah module pos dengan livewire.

11
Tutorial Laravel Livewire - #11 - Membuat Module Dashboard Dengan Livewire

Artikel ini merupakan series dari Tutorial Laravel Livewire Study Case Point Of Sales, disini kita akan membuat sebuah module dashboard dengan livewire.

JurnalKoding

Mulai asah skill dengan berbagai macam teknologi - teknologi terbaru seperti Laravel, React, Vue, Inertia, Tailwind CSS, dan masih banyak lagi.

© 2024 JurnalKoding, Inc. All rights reserved.