Pendahuluan
Artikel ini bertujuan untuk membantu teman-teman dalam belajar dan memahami bagaimana menggunakan Laravel, pada artikel ini saya hanya akan menggunakan Laravel dalam berbagai sisi tanpa adanya stack tambahan yang akan diikut sertakan.
Membuat Struktur Database Dengan Migration
Laravel hadir dengan manajemen databasenya dengan menggunakan Migration, sehingga memudahkan kita dalam mengelola segala perubahan struktur database.
Adapun struktur database yang akan dibuat sejauh ini akan tampak seperti berikut, sedangkan perubahan struktur jika diperlukan akan dilakukan sepanjang seri artikel ini.
Laravel yang akan digunakan adalah versi 5.7 yang merupakan versi terbaru saat ini.
Install terlebih dahulu dengan command :
Install terlebih dahulu dengan command :
composer create-project --prefer-dist laravel/laravel managment-invoice
Setelah meng-Install kemudian masuk ke project kalian dengan command :
Generate model Customer, Product, Invoice dan Invoice_detail beserta migration-nya dengan command:
cd /xampp/htdocs/managment-invoice/
Generate model Customer, Product, Invoice dan Invoice_detail beserta migration-nya dengan command:
php artisan make:model
Customer -m
php artisan make:model Product -m
php artisan make:model Invoice -m
php artisan make:model Invoice_detail -m
php artisan make:model Product -m
php artisan make:model Invoice -m
php artisan make:model Invoice_detail -m
Buka masing - masing file migration yang telah di-Generate, file tersebut berada dalam folder
database/migrations
. Pertama buka file migration daricustomer
kemudian tambahkan code berikut:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateCustomersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('customers', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('phone'); $table->string('address'); $table->string('email')->unique(); $table->timestamps(); }); } /** /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('customers'); } }
Selanjutnya buka file migration dari
products
kemudian tambahkan code berikut :<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateProductsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('description'); $table->integer('price'); $table->integer('stock')->unique(); $table->timestamps(); }); } /** /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('product'); } }
Kemudian migration dari
invoices
:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateInvoicesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('invoices', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('customer_id'); $table->boolean('status')->default(false); $table->string('note')->nullable(); $table->integer('total'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('invoices'); } }
Dan terakhir adalah migration dari
invoice_details
, kemudian lakukan perubahan menjadi:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateInvoiceDetailsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('invoice_details', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('invoice_id'); $table->unsignedInteger('product_id'); $table->integer('price'); $table->integer('qty'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('invoice_details'); } }
Jangan lupa untuk menyesuaikan informasi database dengan memodifikasi file
.env
yang terletak di luar folder pada bagian :DB_CONNECTION = mysql DB_HOST = 127.0.0.1 DB_PORT = 3306 DB_DATABASE = nama_database_kalian DB_USERNAME = user_database_kalian DB_PASSWORD = password_database_kalian
Lalu jalankan command :
php artisan migrate
Apabila disaat melakukan perintah migrate error / tidak success tambahkan code di app/provider/AppServiceProvider
public function boot() { Schema::defaultStringLength(191); }
Relasi Antar Table
Keterkaitan antar table sangat penting untuk mengefisienkan struktur data sehingga dalam mengelola data tersebut menjadi lebih mudah, maka hindari menuliskan property / field yang berulang dengan fungsi dan tujuan yang sama pada table yang berbeda.
Mungkin saja akan terdapat pertanyaan, tapi kok struktur database diatas terdapat field
price
yang sama antara tableproducts
dan invoice_details
? Kenapa tidak menggunakan property yang ada di table products
saja?
Hal ini kita lakukan karena apabila terjadi perubahan harga pada data master, dalam hal ini adalah table
products
tidak akan mempengaruhi harga yang sudah masuk ke dalam table invoice_details
sebelumnya. Sehingga harga yang tercatat adalah harga saat terjadi transaksi.
Dari struktur database yang telah dibuat sebelumnya, terdapat 4 buah table yang saling terkait, yakni:
customers
->invoices
danproducts
<-invoice_details
->invoices
. Buat migration untuk menghubungkan table tersebut dengan command:php artisan make:migration add_relationships_to_invoices_table
Kemudian buka file tersebut, lalu tambahkan code berikut yang berfungsi untuk menghubungkan table
customers
dan table invoices
:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddRelationshipsToInvoicesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('invoices', function (Blueprint $table) { $table->foreign('customer_id') ->references('id')->on('customers') ->onDelete('cascade'); //CASCADE berarti apabila data induk berubah maka data anak juga akan berubah< }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('invoices', function (Blueprint $table) { $table->dropForeign('invoices_customer_id_foreign'); }); } }
File migration selanjutya untuk membuat relasi antara table products, invoice_details dan invoices, generate migration-nya dengan command:
php artisan make:migration add_relationships_to_invoice_details_table
Lalu modifikasi migration tersebut menjadi:
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddRelationshipsToInvoiceDetailsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('invoice_details', function (Blueprint $table) { $table->foreign('invoice_id') ->references('id')->on('invoices') ->onDelete('cascade'); //CASCADE berarti apabila data induk berubah maka data anak juga akan berubah< $table->foreign('product_id') ->references('id')->on('products') ->onDelete('cascade'); //CASCADE berarti apabila data induk berubah maka data anak juga akan berubah< }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('invoice_details', function (Blueprint $table) { $table->dropForeign('invoice_details_invoice_id_foreign'); $table->dropForeign('invoice_details_product_id_foreign'); }); } }
Terakhir, jalankan command:
php artisan migrate
Kesimpulan
Database menjadi kunci yang sangat penting untuk aplikasi berbasis data, sehingga struktur database yang baik akan memudahkan kamu dalam mengelolanya baik saat aplikasi tersebut di-develop ataupun ketika mengalami pengembangan. Sepanjang artikel ini kita telah belajar bagaimana membuat database dengan memanfaatkan fitur Migration dari Laravel, dan tidak hanya itu kita juga telah belajar membuat relasi antar table dengan menerapkan event onDelete dengan value cascade.
Tidak ada komentar:
Posting Komentar