Back to IF3110 Pengembangan Aplikasi Berbasis Web

Topic

Questions/Cues

  • Apa itu Eloquent ORM?

  • Apa itu ORM?

  • Bagaimana membuat Model?

  • Konvensi Eloquent?

  • Lokasi Model?

  • Cara override konvensi?

  • protected $table?

  • public $timestamps?

  • protected $attributes?

  • Cara mengambil (retrieve) data?

  • ::all()

  • ::where()

  • Query Chaining?

  • Agregat (count, max)?

  • firstOrCreate vs firstOrNew?

  • Cara insert data?

  • save() vs create()?

  • Cara update data?

  • Cara delete data?

Reference Points

  • Slides IF3110-10b-Web-Application-Framework-Laravel.pdf (Slide 31-41)

Model: Eloquent ORM

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:

  1. Nama Tabel: Class Flight akan dipetakan ke tabel flights (plural, snake_case). Class UserRole akan dipetakan ke user_roles.

  2. Primary Key: Diasumsikan ada primary key bernama id (integer, auto-increment).

  3. 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().

    $flights = Flight::where('active', 1)
        ->orderBy('name')
        ->take(10)
        ->get();
  • Agregat:

    $count = Flight::where('active', 1)->count();
    $max = Flight::where('active', 1)->max('price');

C: Create (Membuat Data)

  • Metode 1: new + save()

    $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 guarded 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
  • Metode 2: Mass Update

    Flight::where('active', 1)
        ->where('destination', 'Seoul')
        ->update(['delayed' => 1]);

D: Delete (Menghapus Data)

  • Metode 1: find() + delete()

    $flight = Flight::find(1);
    $flight->delete();
  • Metode 2: Mass Delete

    Flight::where('active', 0)->delete();

Summary

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().