Tutorial Panada: Menambahkan Eloquent ORM dari Laravel ke Panada

Laravel, Framework PHP yang kini sedang menyita perhatian cukup banyak programmer dunia sehingga sukses menempati posisi puncak di Trending PHP Libraries di Github. Beberapa hal yang membuat Laravel melejit dengan pesat adalah fitur-fitur yang ditawarkan dan konsep pengembangannya yang tidak ingin terlalu membuang waktu untuk membuat komponennya sendiri, bahkan mengikhlaskan (baca: dengan sengaja) membuat komponen-komponennya mudah digunakan kembali oleh library lain.

Sejumlah fitur yang saya catat dan amati menjadi favorit banyak programmer adalah fitur Query Builder, Eloquent ORM (ActiveRecord), Db Schema Builder, Migration & Seeding, serta Pagination dan integrasi dengan Bootstrap!. Walaupun punya keunggulan tersebut, saya tidak terlalu suka dengan alur logic MVC dan pemanggilan Class-class didalamnya yang kebanyakan static, masih lebih cocok dengan konsep HMVC milik Panada yang simple dan alamiah.

Oke, tantangannya sekarang saya ingin Panada Framework yang saya pakai sehari-hari dalam development, tidak ketinggalan trend yang bergeser ke Laravel (dari CodeIgniter). Syukurlah, Illuminate (codename komponen dari Laravel versi 4) memang didesain mudah digunakan ulang.

Integrasi Illuminate Database ke Panada

Berikut adalah langkah menggunakan Eloquent ORM (Illuminate Database) dari Laravel ke Panada.

NB. Pastikan anda mengunduh Panada versi terbaru, khususnya untuk menangani proses Import dari Composer. (Lihat file /panada/Resources/Import.php).

1. Buat Panada Framework kompatibel dengan Composer (http://getcomposer.org).
Composer adalah sebuah tool untuk melakukan management dependensi library. Untuk menggunakan composer di Panada berikut adalah tahapannya.

Buat file composer.json di /panada/

Panada dari awal telah menyediakan folder vendor yang by default terletak di folder panada/vendors. Lokasi folder ini juga bisa disesuaikan dengan kebutuhan yang konfigurasinya ada di file app/config/main.php. Kita akan menggunakan folder ini untuk menampung semua package yang akan kita download via composer.

Kita perlu menambahkan informasi folder panada/vendors ini di dalam composer.json seperti contoh berikut:

{
    "config": {
        "vendor-dir": "panada/vendors"
    }
}

2. Tambahkan requirement librari Illuminate Database milik Laravel

{
    "config": {
        "vendor-dir": "panada/vendors"
    },
    "require": {
        "illuminate/database": "*"
    }
}

3. Install Illuminate Database dengan composer (lihat tutorial tentang Instalasi Composer) jalankan di terminal/console/command prompt:

composer install

Pastikan dan cek pada direktori /panada/vendors/ telah ada folder illuminate/database dkk, termasuk dependensinya.

4. Buat wrappernya untuk Panada.

<?php
/**
	Illuminate Database Wrapper for Panada Framework
	
	@copyright (c) 2013 Luthfi Emka, SistemInformasi.biz
	@license MIT
	@author Luthfi Emka <luthfi@emka.web.id>
	@version 0.1
	@url http://code.emka.web.id/
	
**/

use Illuminate\Database\Capsule\Manager as Eloquently;
use Resources;

//get connection config from Panada Configuration files

//use 'default' string for default connection
if(empty($_connection))
	$_connection = 'default';
	
$config         = Resources\Config::database();
$cfg   			= $config[$_connection];

//wrap Illuminate Capsule Manager
$DB = new Eloquently;

//adding new  db connection
$DB->addConnection([
    'driver'    => $cfg['driver'],
    'host'      => $cfg['host'],
    'database'  => $cfg['database'],
    'username'  => $cfg['user'],
    'password'  => $cfg['password'],
    'charset'   => $cfg['charset'],
    'collation' => $cfg['collate'],
    'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$DB->setEventDispatcher(new Dispatcher(new Container));

// Make this Capsule instance available globally via static methods... (optional)
$DB->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$DB->bootEloquent();

simpan sebagai Eloquently.php pada direktori /panada/vendors/ misalnya.

Contoh Penggunaaan

Berikut adalah contoh penggunaan Illuminate Database pada Model di Panada.


<?php namespace Models;
use Resources;
use \Illuminate\Database\Eloquent\Model as Eloquent;

$_connection = 'default';

require GEAR."vendors/Eloquently.php";

Class Eloquently extends Eloquent
{	
	public $table = 'users';
	
}

pada model diatas, kita hanya perlu menggunakan kembali \Illuminate\Database\Eloquent\Model sebagai Eloquent, meng-include Wrapper yang telah dibuat, menentukan koneksi database yang akan dipakai. Selanjutnya tinggal menggunakan Eloquent ORM sesuai petunjuknya disini:
http://laravel.com/docs/eloquent

Untuk penggunaan static di models atau controller,misalnya:

$users = Eloquently::table('users')->where('votes', '>', 100)->get();
atau
$results = Eloquently::select('select * from users where id = ?', array(1));

jangan lupa pada bagian atas Controller/Models yang anda buat cantumkan: use Illuminate\Database\Capsule\Manager as Eloquently;

atau contoh untuk Schema Builder:

Eloquently::schema()->create('users', function($table)
{
    $table->increments('id');
    $table->string('email')->unique();
    $table->timestamps();
});

Tertarik? Anda bisa menggunakan Wrapper diatas di framework anda sendiri loh!

Silakan baca tentang Eloquent ORM-nya laravel disini:
http://laravel.com/docs/eloquent

Wagiman Wiryosukiro

Petani Sistem Informasi, tukang las plugin & themes Wordpress. Co-Founder SistemInformasi.biz. Saat ini aktif sebagai Developer & kontributor di OpenMandriva Linux.

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: