Eloquent ORM: Model dan Mass Assignment
Kenalan dengan model Eloquent, konvensi penamaan, dan jebakan mass assignment ($fillable).
Model: representasi tabel
Setiap tabel biasanya punya satu model Eloquent. Buat dengan Artisan:
php artisan make:model PostModel disimpan di app/Models/Post.php. Konvensi Laravel: model Post otomatis memakai tabel posts (bentuk plural). Kalau nama tabelmu beda, tentukan manual:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
// protected $table = 'artikel'; // kalau nama tabel tidak konvensi
// protected $primaryKey = 'post_id'; // kalau PK bukan 'id'
// public $timestamps = false; // kalau tidak ada created_at/updated_at
}Mengambil data: semudah ini
use App\Models\Post;
$semua = Post::all(); // semua baris
$satu = Post::find(1); // by primary key, null kalau tidak ada
$satuAtau404 = Post::findOrFail(1); // 404 otomatis kalau tidak ada
$terbaru = Post::latest()->take(5)->get(); // 5 terbaru
$jumlah = Post::where('status', 'published')->count();findOrFail sangat praktis di controller: tidak perlu if manual, Laravel langsung melempar 404.
Mass assignment dan $fillable
Saat membuat atau update data sekaligus dari array (misalnya langsung dari request), Laravel memproteksi dari mass assignment vulnerability:
// app/Models/Post.php
class Post extends Model
{
protected $fillable = ['judul', 'slug', 'isi', 'status'];
// kolom user_id TIDAK ada di sini: tidak bisa diisi massal
}
// Aman: hanya kolom fillable yang masuk
Post::create($request->validated());Catatan teknis: Tanpa
$fillable(atau$guarded), pemanggilanPost::create($request->all())melemparMassAssignmentException. Jangan asal pakaiprotected $guarded = [];(artinya semua kolom boleh diisi massal) kecuali kamu paham risikonya, karena user bisa mengutak-atik field sensitif sepertiis_adminlewat form. Selalu daftarkan hanya kolom yang memang boleh diisi user.