¶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.
Sesuai gambar diatas, berikut ini relasi antar tabel yang akan kita gunakan nanti :
-
One To Many (belongsTo)
- antara table products dan categories.
-
One To Many (belongsTo)
- antara table transaction_details dan transactions.
-
One To Many (belongsTo)
- antara table transaction_details dan products.
-
One To Many (belongsTo)
- antara table transactions dan users.
-
One To Many (belongsTo)
- antara table carts dan users.
-
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 :
-
app/Models/Category.php
-
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 :
-
app/Models/Product.php
-
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 :
-
app/Models/Cart.php
-
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 :
-
relasi dari tabel carts ke tabel users
$table->foreignId('user_id')->constrained('users');
-
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 :
-
app/Models/Transaction.php
-
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 :
-
app/Models/TransactionDetail.php
-
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 :
-
relasi dari tabel transaction_details ke tabel transaction
$table->foreignId('transaction_id')->constrained('transactions');
-
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.