;
Belajar Laravel dengan Mudah dan Menyenangkan
Model adalah kelas PHP di Laravel yang mewakili tabel di database, memungkinkan kamu mengelola data (CRUD) menggunakan Eloquent ORM. Setiap model terhubung dengan satu tabel dan menyederhanakan interaksi dengan database.
Laravel memiliki konvensi penamaan untuk model dan tabel:
posts, anggaran_kegiatan).Post, AnggaranKegiatan).Post otomatis terhubung ke tabel posts.Contoh:
posts → Model Post.anggaran_kegiatan → Model AnggaranKegiatan.Jalankan perintah berikut untuk membuat model:
php artisan make:model Post
Ini membuat file app/Models/Post.php yang otomatis terhubung ke tabel posts.
Jika nama tabel tidak mengikuti konvensi (misalnya, tabel bernama data_postingan untuk model Post), tentukan nama tabel secara eksplisit di model dengan properti $table:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $table = 'data_postingan';
}
idLaravel mengasumsikan kunci primer tabel adalah id. Jika kunci primer memiliki nama lain, seperti id_program, tentukan di model dengan properti $primaryKey:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Program extends Model
{
protected $table = 'program_kegiatan';
protected $primaryKey = 'id_program';
}
Jika kunci primer bukan auto-incrementing, tambahkan:
public $incrementing = false;
Jika bukan integer (misalnya, UUID), tambahkan:
protected $keyType = 'string';
Eloquent mendukung relasi seperti one-to-one, one-to-many, dan many-to-many. Berikut penjelasan untuk relasi antar 2, 3, dan 4 tabel dengan contoh sederhana.
Skenario: Tabel users (kolom: id, name) dan posts (kolom: id, user_id, title). Satu pengguna memiliki banyak postingan.
User:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
Post:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
$user = User::find(1);
$posts = $user->posts; // Ambil semua postingan pengguna
$post = Post::find(1);
$userName = $post->user->name; // Ambil nama pengguna dari postingan
Skenario: Tambah tabel comments (kolom: id, post_id, content). Satu postingan memiliki banyak komentar.
Post (tambahan relasi):
public function comments()
{
return $this->hasMany(Comment::class);
}
Comment:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
$post = Post::find(1);
$comments = $post->comments; // Ambil semua komentar untuk postingan
$user = $post->user; // Ambil pengguna dari postingan
Skenario: Tambah tabel categories (kolom: id, name) dan tabel pivot category_post (kolom: post_id, category_id). Satu postingan bisa memiliki banyak kategori, dan satu kategori bisa dimiliki banyak postingan.
Post (tambahan relasi):
public function categories()
{
return $this->belongsToMany(Category::class, 'category_post');
}
Category:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function posts()
{
return $this->belongsToMany(Post::class, 'category_post');
}
}
$post = Post::find(1);
$categories = $post->categories; // Ambil semua kategori untuk postingan
$category = Category::find(1);
$posts = $category->posts; // Ambil semua postingan untuk kategori
Buat model untuk tabel program_kegiatan dengan kunci primer id_program:
php artisan make:model Program
Edit app/Models/Program.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Program extends Model
{
protected $table = 'program_kegiatan';
protected $primaryKey = 'id_program';
protected $fillable = ['nama_program', 'anggaran'];
}
Gunakan di route:
use App\Models\Program;
Route::get('/program', function () {
return Program::all();
});
Selamat! Kamu sudah menguasai dasar model Laravel, penamaan tabel, kunci primer, dan relasi antar tabel!