laraveleloquentmodelormPemula3 mnt baca

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:

bash
php artisan make:model Post

Model disimpan di app/Models/Post.php. Konvensi Laravel: model Post otomatis memakai tabel posts (bentuk plural). Kalau nama tabelmu beda, tentukan manual:

php
// 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

php
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:

php
// 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), pemanggilan Post::create($request->all()) melempar MassAssignmentException. Jangan asal pakai protected $guarded = []; (artinya semua kolom boleh diisi massal) kecuali kamu paham risikonya, karena user bisa mengutak-atik field sensitif seperti is_admin lewat form. Selalu daftarkan hanya kolom yang memang boleh diisi user.