Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 3 - Membuat Model File untuk tabel Post
Epsiode:
- Part 0 - Persiapan, bisa baca disini
- Part 1 - Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 1 - Mengenal Struktur Folder dan Model
- Part 2 - Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 2 - Membuat Model dan Migration File untuk Category
- Part 2.5 - Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 2.5 - Penjelasan Video episode 2
Pada artikel sebelumnya kita sudah membuat Model dan Migration file untuk tabel "Category". Pada artikel kali ini kita akan membuat Model dan Migration untuk tabel "Post".
Sama seperti ketika membuat Model dan Migration pada tabel Category, untuk membuat Model dan Migration file untuk tabel Post kita juga akan menggunakan command php artisan yang sama, hanya mengganti nama tabel nya.
Ikuti langkah berikut
- Buka terminal dan jalankan perintah sebagai berikut
php artisan make:model Post -m
- Maka akan tergenerate dua file secara otomatis
- File Model "Post" terletak pada app/Models/Post.php
- File Migration untuk post, dengan nama file yang panjang, berada pada folder "database/migrations"
Edit file Model Post seperti berikut
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class Post extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = [
"title",
"slug",
"body",
"embed",
"author_id",
"category_id",
"status",
"thumbnail",
];
protected static function boot()
{
parent::boot();
static::creating(function ($post) {
$post->author_id = Auth::id();
});
// Membuat slug dari title sebelum menyimpan
static::saving(function ($post) {
// Hanya generate slug jika title diubah atau slug masih kosong
if ($post->isDirty('title') || empty($post->slug)) {
$post->slug = Str::slug($post->title);
}
});
}
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'author_id');
}
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
}Untuk Model post, kita membuat list kolom apa saja yagn akan kita tambahkan pada tabel "posts", kita tambahkan list nya pada variable protected dengan nama $fillable
protected $fillable = [
"title",
"slug",
"body",
"embed",
"author_id",
"category_id",
"status",
"thumbnail",
];
Karena setiap postingan harus dimiliki oleh satu Author, maka kita akan menambahkan secara otomatis, ID Author yang membuat artikel.
static::creating(function ($post) {
$post->author_id = Auth::id();
});Code daitas adalah perintah untuk menambahkan ID Author secara otomatis, diambil dari ID user yang sedang login.
Karena kita membutuhkan slug untuk keperluan routing halaman website untuk detail artikel nya, maka kita juga menambahkan kode untuk membuat slug otomatis
// Membuat slug dari title sebelum menyimpan
static::saving(function ($post) {
// Hanya generate slug jika title diubah atau slug masih kosong
if ($post->isDirty('title') || empty($post->slug)) {
$post->slug = Str::slug($post->title);
}
});Membuat Relasi Tabel
Karna kita akan menampilkan nama dari User berdasarkan Author ID yang sudah kita simpan otomatis, maka kita membutuhkan relasi antara tabel post dan tabel User
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'author_id');
}Penjelasan nya adalah, utnuk setiap Post artikel yang ada, dia akan dimiliki (BelongsTo) oleh satu user. Tidak mungkin untuk satu artikel mempunyai dua Author.
Sama seperti Kategori, untuk setiap Artikel, hanya memiliki satu category
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}Demikian apa saja yang perlu diperhatikan ketika membuat file Model post. untuk pembuata file migration akan saya buat pada artikel selanjutnya