Eloquent adalah ORM (Object-Relational Mapper) bawaan Laravel.
Apa itu ORM?
ORM adalah sebuah teknik yang “memetakan” tabel di database relasional (seperti MySQL) menjadi class dan object dalam bahasa pemrograman (seperti PHP).
Tanpa ORM: Kita menulis query SQL manual: SELECT * FROM flights WHERE active = 1.
Dengan ORM: Kita menggunakan method pada object: Flight::where('active', 1)->get().
Ini membuat interaksi dengan database terasa lebih alami, aman, dan mudah dikelola.
Membuat Model:
Lokasi: Model disimpan di app/Models/
Perintah Artisan: php artisan make:model Flight
Perintah (dengan migrasi): php artisan make:model Flight --migration (Sangat direkomendasikan, ini akan membuat file model dan file migration sekaligus).
Konvensi Eloquent (“Convention over Configuration”)
Eloquent mengasumsikan beberapa hal secara default agar kita tidak perlu repot melakukan konfigurasi:
Nama Tabel:ClassFlight akan dipetakan ke tabel flights (plural, snake_case). ClassUserRole akan dipetakan ke user_roles.
Primary Key: Diasumsikan ada primary key bernama id (integer, auto-increment).
Timestamps: Diasumsikan ada kolom created_at dan updated_at yang akan diisi otomatis.
Meng-override Konvensi:
Kita bisa menimpa konvensi default dengan mendefinisikan property di dalam class Model:
class Flight extends Model { // Menentukan nama tabel kustom protected $table = 'my_flights'; // Menentukan primary key kustom protected $primaryKey = 'flight_id'; // Primary key bukan auto-increment public $incrementing = false; // Tipe data primary key protected $keyType = 'string'; // Menonaktifkan timestamps (created_at, updated_at) public $timestamps = false; // Menentukan koneksi database kustom protected $connection = 'sqlite'; // Menentukan nilai default untuk atribut protected $attributes = ['delayed' => false];}
Operasi CRUD dengan Eloquent
R: Retrieve (Mengambil Data)
Ambil Semua:
$flights = Flight::all(); // Mengembalikan Collection of Flight
Query Sederhana (Chaining): Kita bisa “merangkai” (chaining) beberapa method untuk membangun query. Query baru dieksekusi saat kita memanggil get().
$flight = new Flight;$flight->name = 'Jakarta to Singapore'; $flight->save(); // Baru tersimpan ke DB
Metode 2: create() (Mass Assignment)
$flight = Flight::create(['name' => 'Warsaw to Budapest']);
(Catatan: Metode ini memerlukan properti fillableatauguarded di Model untuk keamanan. Lihat Ad Libitum).
firstOrCreate vs firstOrNew:
firstOrCreate: Mencari data. Jika ada, kembalikan. Jika tidak ada, buat DAN simpan ke database, lalu kembalikan.
$flight = Flight::firstOrCreate(['name' => 'London to Paris']);
firstOrNew: Mencari data. Jika ada, kembalikan. Jika tidak ada, buat instance baru (di memori, BELUM disimpan ke database).
$flight = Flight::firstOrNew(['name' => 'Tokyo to Sydney']);
U: Update (Memperbarui Data)
Metode 1: find() + save()
$flight = Flight::find(1); // Cari data dengan ID 1 $flight->name = 'Sankt-Peterburg to Novosibirsk'; $flight->save(); // Update di DB
Eloquent adalah Object-Relational Mapper (ORM) Laravel yang memetakan class Model (seperti Flight) ke tabel database (seperti flights) menggunakan konvensi. Ini menyederhanakan interaksi database dengan menyediakan method berbasis object untuk melakukan operasi CRUD (Create, Retrieve, Update, Delete). Kita bisa mengambil data dengan ::all() atau ::where()->get(), membuat data dengan new Model + save() atau ::create(), memperbarui dengan find() + save() atau ::update(), dan menghapus dengan find() + delete() atau ::where()->delete().
Additional Information
Topik Teknis: Keamanan Mass Assignment ($fillable vs $guarded)
Slide (halaman 39) menyebutkan: //require specifying properties like 'guarded' or 'fillable'. Ini sangat penting.
Bayangkan Anda memiliki form registrasi dan ModelUser. Jika seorang hacker menambahkan field tersembunyi di form HTML: <input type="hidden" name="is_admin" value="1">.
Jika Anda menggunakan User::create($request->all()); tanpa perlindungan, hacker tersebut bisa membuat akunnya sendiri menjadi admin.
Solusinya:
$fillable (Whitelist - Direkomendasikan)
Menentukan hanya kolom mana yang boleh diisi melalui Mass Assignment.