Menggunakan Eloquent diluar Laravel

Oke, ini sudah banyak dibahas ditempat lain. Tapi tetep saya bahas supaya saya sendiri gak lupa 😐

Jadi ceritanya saya sedang mengerjakan suatu project yang menggunakan masih CodeIgniter 3.0.0-dev. Yang mana pada saat di-update ke stable version tidak bisa -_-” Terlalu banyak error. Mungkin API-nya banyak berubah, atau bisa jadi programmer sebelumnya menambahkan sesuatu ke folder system. Tapi, saya tidak yakin karena tidak ada history tersebut di version control. Dari version control, semua terlihat masih fresh (jumlah commit bisa dikatakan fresh). Atau saya yang kurang familiar dengan CodeIgniter? :/ Karena dulu langsung jump ke Kohana setelah beberapa hari mencoba belajar CodeIgniter.

Saat mau menambahkan suatu fitur, ternyata masih belum menggunakan ORM. Seandainya menggunakan Gas ORM punya Om Taufan atau ORM lain, tentunya hidup saya akan lebih mudah XD .

So, sekalian experiment… jadi saya tambahkan saja sendiri Eloquent ke CodeIgniter. Karena memang Eloquent ini (dan hampir semua Laravel component) loose coupled, jadi saya bisa gunakan di project lain dengan mudah. Info lebih lanjut bisa dipelajari di https://github.com/illuminate/database.

Caranya gampang… saya cukup grab dari packagist dengan menggunakan composer.

composer require illuminate/database

Setelah itu masukkin ke file config/database.php di paling bawah

// Load Eloquent
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection(array(
    'driver'    => 'mysql',
    'host'      => $db['default']['hostname'],
    'database'  => $db['default']['database'],
    'username'  => $db['default']['username'],
    'password'  => $db['default']['password'],
    'charset'   => $db['default']['char_set'],
    'collation' => $db['default']['dbcollat'],
    'prefix'    => $db['default']['dbprefix'],
));

$capsule->setAsGlobal();

$capsule->bootEloquent();

Oke, tinggal bikin file untuk model. Misalnya letakkan di Models/User.php, Models/Profile.php. Supaya file itu bisa diload dengan mudah, tanpa harus menggunakan require Models/User.php, saya tambahkan saja ke daftar composer autoloader. Edit file composer.json, lalu tambahin

{
  "autoload": {
    "classmap": [
      "Models/"
    ]
  }
}

Jangan lupa setelah itu jalankan composer dump.

Jangan lupa juga tambahkan require vendor/autoload.php supaya autoloader masuk ke project. Misalnya index.php

Hmm, kendala berikutnya ternyata ada query yang harus menggunakan DB::raw(). Solusi paling mudah adalah dengan menggunakan Illuminate\Database\Query\Expression.

Jadi kira-kira seperti ini codenya

use Illuminate\Database\Query\Expression;

// ...

Book::where('status', 'published')
  ->where(new Expression("MATCH (title, description) AGAINST ('$keyword') IN BOOLEAN MODE"))

Aaaanddd… It works 😀

UPDATE

My bad, lupa kalau ada method whereRaw() -_-
Jadi bisa lebih simple lagi tuh.

Reference

Iklan

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s