Model merupakan salah satu bagian dari arsitektur MVC. Jadi apa sih
MVC itu ? jadi di dalam kebanyakan framework pasti menggunakan arsitektur/pola
yang disebut MVC atau kepanjangan dari (Model,
View dan Controller).
Laravel juga menerapkan arsitektur/pola MVC di dalam core system-nya, dengan
menggunakan arsitektur ini maka proses pembuatan aplikasi akan dipisahkan berdasarkan fungsinya
masing-masing.
- Model merupakan bagian yang digunakan untuk menangani query data dari
database.
- View digunakan untuk menampilkan sesuatu di layar web browser,
biasanya berupa kode-kode seperti HTML, CSS dan JavaScript.
- Controller digunakan untuk menangani logika dari aplikasi dan berperan
untuk menghubungkan antara Model dengan View.
Sedangkan untuk Migration merupakan fitur yang ada di dalam framework Laravel,
yang digunakan untuk membuat version control database. Dimana kita bisa
membuat schema database dan membagikannya dengan tim yang lain secara mudah. Jika
sebelumnya kita membuat attribute secara manual di dalam database, maka dengan
migration kita tidak perlu melakukan hal seperti itu lagi, seperti membuat table,
menambahkan attribute, mengubah tipe data dan lain-lain.
Pada bab perancangan dan materi struktur database, kita sudah melihat beberapa
table-table yang akan kita gunakan nantinya dan kali ini kita akan belajar bagaimana cara
membuat Model dan juga Migration untuk melakukan generate table-table tersebut ke
dalam database.
INFORMASI : By default Laravel sudah membuatkan kita Model dan Migration
User yang nanti akan di generate manjadi table users di dalam database,
jadi kita tidak perlu membuatnya lagi secara manual.
Langkah 1 - Membuat Model dan Migration
Categories
Laravel mempermudah para developer dalam membuat sebuah fitur menggunakan perintah
CLI (command line interface) dari artisan, termasuk membuat Model dan
juga Migration.
Sekarang kita coba untuk membuat sebuah Model dan juga Migration untuk table
categories, silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan
berada di dalam project Laravel-nya :
php artisan make:model Category -m
Perintah di atas, digunakan untuk melakukan generate sebuah Model dengan nama
Category dan karena kita menambahkan flag -m, maka kita juga akan
menyertakan sebuah Migration-nya.
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 2 file baru di dalam
project Laravel, yang berad di dalam folder :
app/Models/Category.php
database/migrations/2025_05_15_011402_create_categories_table.php
INFORMASI : untuk nama file migration akan diambil dari tanggal
pembuatannya.
Sekarang kita akan lanjutkan untuk menambahkan beberapa kode di dalam file Model dan jug
Migration. Silahkan buka file
database/migrations/2025_05_15_011402_create_categories_table.php, kemudian ubah pada
bagian function up menjadi seperti berikut ini :
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('slug');
$table->string('image');
$table->timestamps();
});
}
Dari perubahan yang kita lakukan di atas, kurang lebih kita menambahkan 3 attribute baru, yaitu
:
| ATTRIBUTE |
TYPE DATA |
OPTIONS |
DESCRIPTION |
name |
string |
- |
untuk menyimpan nama category. |
slug |
string |
- |
untuk membuat URL friendly. |
image |
string |
- |
untuk menyimpan nama gambar. |
Setelah berhasil menambahkan beberapa attribute di dalam file migration, maka sekarang
kita lanjutkan untuk menambahkaan mass assignment di dalam file model.
Tujuannya agar attribute yang sudah kita tambahkan di atas dapat melakukan manipulasi data,
seperti proses insert, update dan delete.
Silahkan buka file app/Models/Category.php dan ubah semua kode-nya menjadi seperti
berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $fillable = [
'name', 'slug', 'image'
];
}
Di atas kita menambahkan properti $fillable, dimana properti tersebut digunakan untuk
mass assignment dari attribute yang sudah kita tambahkan di file migration.
Langkah 2 - Membuat Model dan Migration places
Kita lanjutkan untuk membuat Model dan Migration untuk data places. silahkan jalankan perintah
berikut ini di dalam terminal/CMD dan tentu saja pastikan sudah berada di dalam project
Laravel.
php artisan make:model Place -m
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 2 file baru yang berada di
dalam folder :
app/Models/Place.php
database/migrations/2025_05_15_011443_create_places_table.php
Setelah itu, kita akan lanjutkan menambahkan beberapa attribute di dalam file
migration. Silahkan buka file migration places yang berada di
database/migrations/2025_05_15_011443_create_places_table.php dan pada
function up ubah kode-nya menjadi seperti berikut ini :
public function up(): void
{
Schema::create('places', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug');
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('category_id');
$table->text('description');
$table->string('phone');
$table->string('website');
$table->string('office_hours');
$table->text('address');
$table->string('longitude');
$table->string('latitude');
$table->timestamps();
$table->foreign('category_id')->references('id')->on('categories');
$table->foreign('user_id')->references('id')->on('users');
});
}
Dari perubahan kode di dalam file migration di atas, kita menambahkan 11 attribute,
yaitu :
| ATTRIBUTE |
TYPE DATA |
OPTIONS |
DESCRIPTION |
title |
string |
- |
untuk menyimpan judul place. |
slug |
string |
- |
untuk membuat URL friendly. |
user_id |
unsignedBigInteger |
foreign key |
untuk melakukan relasi dengan table users. |
category_id |
unsignedBigInteger |
foreign key |
untuk melakukan relasi dengan table categories. |
description |
text |
- |
untuk menyimpan keterangan place. |
phone |
string |
- |
untuk menyimpan no. telp. |
website |
string |
- |
untuk menyimpan website. |
office_hours |
string |
- |
untuk menyimpan jam kerja. |
address |
text |
- |
untuk menyimpan alamat. |
longitude |
string |
- |
untuk menyimpan kordinat longitude dari maps. |
latitude |
string |
- |
untuk menyimpan kordinat latitude dari maps. |
Setelah itu, kita juga menambahkan 2 relasi, yaitu :
$table->foreign('category_id')->references('id')->on('categories');
Di atas, kita mereferensikan attribute category_id sebagai foreign key ke
dalam attribute id yang ada di dalam table categories.
$table->foreign('user_id')->references('id')->on('users');
Di atas, kita mereferensikan attribute user_id sebagai foreign key ke
dalam attribute id yang ada di dalam table users.
Setelah berhasil menambahkan beberapa attribute beserta relasi di dalam file migration,
maka sekarang kita akan lanjutkan untuk menambahkan mass assignment di dalam model.
Silaahkan buka file app/Models/Place.php, kemudian ubah semua kode-nya menjadi
seperti berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Place extends Model
{
protected $fillable = [
'title', 'slug', 'user_id', 'category_id', 'description', 'phone', 'website', 'office_hours', 'address', 'longitude','latitude'
];
}
Di atas, kita menambahkan properti $fillable, properti tersebut digunakan untuk
mass assignment yang tujuannya untuk mengizinkan attribute agar bisa
melakukan manipulasi data.
Langkah 3 - Membuat Model dan Migration
place_images
places_images nantinya akan berupa table yang akan kita gunakan untuk menyimpan
gambar-gambar dari data place. Karena kita akan buat agar 1 data place bisa memiliki
banyak gambar di dalamnya. Maka kita akan jadikan table place_images berelasi
ONE TO MANY dengan table places.
Silahkan jalankan perintah berikut ini di dalam terimnal/CMD dan pastikan berada di dalam
project Laravel :
php artisan make:model PlaceImage -m
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan 2 file baru di dalam
folder :
app/Models/PlaceImage.php
database/migrations/2025_05_15_011551_create_place_images_table.php
Sekarang kita akan menambahkan beberapa attribute di dalam file migration. Silahkan
buka file migration place_images di dalam folder
database/migrations/2025_05_15_011551_create_place_images_table.php dan ubah pada
function up menjadi seperti berikut ini :
public function up(): void
{
Schema::create('place_images', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('place_id');
$table->string('image');
$table->timestamps();
$table->foreign('place_id')->references('id')->on('places');
});
}
Dari penambahan kode di atas, kurang lebih kita menambahkan 2 attribute baru, yaitu :
| ATTRIBUTE |
TYPE DATA |
OPTIONS |
DESCRIPTION |
place_id |
unsignedBigInteger |
foreign key |
untuk melakukan relasi dengan table places. |
image |
string |
- |
untuk menyimpan nama gambar. |
Setelah itu, kita juga menambahkan 1 relasi, yaitu :
$table->foreign('place_id')->references('id')->on('places');
Di atas, kita mereferensikan attribute place_id sebagai foreign key ke
dalam attribute id yang ada di dalam table places.
Setelah itu, kita akan menambahkan mass assignment di dalam model
PlaceImage yang bertujuan untuk mengizinkan attribute agar bisa memanipulasi data.
Silahkan buka file app/Models/PlaceImage.php, kemudian ubah semua kode-nya menjadi
seperti berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PlaceImage extends Model
{
protected $fillable = [
'place_id', 'image'
];
}
Di atas, kita menambahkan properti $fillable dengan isi data attribute yang sudah
kita buat sebelumnya di dalam file migration.
Langkah 4 - Membuat Model dan Migration
sliders
Terakhir kita akan membuat Model dan Migration untuk sliders. Silahkan jalankan perintah berikut
ini di dalam terminal/CMD dan pastikan berada di dalam project Laravel.
php artisan make:model Slider -m
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatka 2 file baru yang berada di
dalam folder :
app/Models/Slider.php
database/migrations/2025_05_15_011630_create_sliders_table.php
Sekarang kita akan menambahkan attribute baru di dalam file migration sliders. Silahkan
buka file tersebut di
database/migrations/2025_05_15_011630_create_sliders_table.php kemudian pada
function up ubah menjadi seperti berikut ini :
public function up(): void
{
Schema::create('sliders', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('image');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
}
Dari perubahan kode di atas, kita menambahkan 2 attribute baru, yaitu :
| ATTRIBUTE |
TYPE DATA |
OPTIONS |
DESCRIPTION |
user_id |
unsignedBigInteger |
foreign key |
untuk melakukan relasi dengan table users. |
image |
string |
- |
untuk menyimpan nama gambar. |
Setelah itu, kita juga menambahkan 1 relasi, yaitu :
$table->foreign('place_id')->references('id')->on('places');
Di atas, kita mereferensikan attribute user_id sebagai foreign key ke
dalam attribute id yang ada di dalam table users.
Kita lanjutkan untuk menambahkan mass assignment di dalam Model Slider.
Silahkan buka file app/Models/Slider.php, kemudian ubah semua kode-nya menjadi
seperti berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Slider extends Model
{
protected $fillable = [
'user_id', 'image',
];
}
Di atas seperti sebelum-sebelumnya, kita menambahkan properti $fillable untuk mendefinisikan
mass assignment, yang tujuannya agar attribute yang ada bisa melakukan
manipulasi data di dalam database.
Langkah 5 - Menjalankan Proses Migrate
Setelah kita berhasil membuat beberapa file migration beserta
attribute-attribute di dalamnya, maka kita akan lanjutkan untuk menjalankan proses
migrate. Tujuannya agar kode-kode yang sudah kita buat di dalam file migration
tersebut akan di generate menjadi sebuah table beserta attribute dan
relasinya.
Silahkan jalankan perintah berikut ini di dalam terminal/CMD dan pastikan berada di dalam folder
project Laravel-nya.
php artisan migrate
Di atas merupakan gambar dari proses migrate. Jika berhasil kita bisa lihat di dalam database
yang ada di PhpMyAdmin, maka kita akan mendapatkan sebuah table-table
berserta attribute dan relasinya.