Cara menggunakan parisorm di codeigniter

Mungkin sebagai developer Codeigniter / CI pernah merasa bahwa active record yang built in pada framework ini terlalu ribet, clunky, rentan bug atau apalah lah membuat kita berpikir apakah ada cara yang lebih mudah dan menjadikan kode yang kita tulis menjadi lebih mudah dibaca, beautiful dan maintainable tapi tanpa perlu ganti framework. Hal tersebut pernah saya rasakan dan coba-coba cari alternative library database dan voila pilihan saya ada pada Paris ORM. Salah satu alasannya, saya suka quote yang disampaikan oleh developer library ini bahwa Library ORM mestinya simple dengan argumen bahwa tidak semua programmer memiliki project task dengan skala yang besar seperti facebook (idiorm).

Apa itu paris orm ?
Merupakan library aksesibilitas dan manipulasi database agnostik (dalam artian tidak terikat pada satu framework tertentu) yang jauh lebih mudah daripada menggunakan active record bawaan dari Codeigniter. Simplenya klo menggunakan ParisORM ini serasa kaya menggunakan library EloquentORM dari Laravel tapi tanpa perlu pakai laravel hehe.


Pengalaman saya menggunakan library ini :

1). Lebih menghemat waktu karena tidak perlu banyak menuliskan banyak query, anda senang klien juga senang hehe
2). Coding lebih mudah dibaca jadi lebih mudah dong maintenance
3). Lebih aman karena proses koneksi sudah dihandle potensi SQL Injection
4). Mengurangi Bug karena active record pada pengaksesan data (lihat pada gambar pada foreach)
5). Kekiniaan hehe…

Apa saja fitur dari Paris ORM ini ?
Beberapa fitur dari paris ORM ini diantaranya adalah sebagai berikut :

  1. Konfigurasi ORM pada library ini tidak ribet tidak seperti propel atau docrine di Sympony
  2. Mendukung fitur method chaining atau pemanggilan fungsi secara langsung dari fungsi object ke fungsi lain
    $kelurahan_list = AreaORM::select(‘id’)->where(‘parent’, $kecamatan_id)->find_many();
  3. Mendukung fitur relation one-to-one, one-to-many dan belongs-to tanpa perlu konfigurasi pada level database.
  4. Raw SQL query tersedia
  5. dan lain sebagainya baiknya agan langsung aja meluncur di official docs nya disini

Sudah cukup sepertinya, berikut akan dijelaskan tentang cara integrasi library ini di Codeigniter.

1. Install Composer
silahkan dilihat referensi pada instalasi composer pada official page composer di link berikut :
Tautan Instalasi Composer

2. Instalasi Paris ORM menggunakan Composer

Sebelum instalasi library ini pastikan bahwa anda sudah ada di folder project CI anda, misalnya folder saya di directory berikut maka instalasinya adalah sebagai berikut (dijalankan di command prompt) :

E:\wamp64\www\my_project>composer require j4mie/paris

atau jika anda sudah masuk ke directory jalankan perintah ini di command prompt

composer require j4mie/paris

jika proses instalasi sudah selesai pastikan bahwa di folder root project anda sudah tersedia file/folder yang ditampilkan pada gambar berikut struktur directorynya :

3. Membuat konfigurasi koneksi database

Sebelum ke langkah ini jangan lupa untuk menambahkan parameter koneksi database di file project_root/application/config/database.php silahkan copas coding berikut kemudian taruh di folder project_root/application/config/orm_config.php 
Berikut codingnya :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

require('database.php');

$host 		= $db['default']['hostname'];
$username 	= $db['default']['username'];
$pass 		= $db['default']['password'];
$db 		= $db['default']['database'];

ORM::configure('mysql:host='.$host.';dbname='.$db.'');
ORM::configure('username', $username);
ORM::configure('password', $pass);
ORM::configure('logging', true);

4. Buat folder orm di folder root

Buat satu directory baru di folder root dengan nama orm dan orm/autoload anda. contohnya sebagai berikut (pada gambar dibawah ini perpustakaan adalah folder root codeigniter) :

 

5. Buat satu file baru di folder ORM tersebut yang berfungsi sebagai autoloader

Untuk membuat tiap class pada orm yang nantinya akan kita buat akan berjalan secara otomatis maka kita perlu menambahkan satu file ORMAutoloader.php pada folder orm/autoload  (lihat pada gambar). silahkan copas code berikut :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014 Rob Dunham Modified by navotera (share-system.com)
 * 
/**
 * Simple Recursive Autoloader
 * 
 * A simple autoloader that loads class files recursively starting in the directory
 * where this class resides.  Additional options can be provided to control the naming
 * convention of the class files.
 *
 * @package Autoloader
 * @license http://opensource.org/licenses/MIT  MIT License
 * @author  Rob Dunham Modified by navotera (navotera@gmail.com)
 */
class ORMAutoloader
{
    /**
     * File extension as a string. Defaults to ".php".
     */
    protected static $fileExt = '.php';
    /**
     * The top level directory where recursion will begin. Defaults to the current
     * directory.
     */
    protected static $pathTop = PARENTPATH.'/orm';
    /**
     * A placeholder to hold the file iterator so that directory traversal is only
     * performed once.
     */
    protected static $fileIterator = null;
    /**
     * Autoload function for registration with spl_autoload_register
     *
     * Looks recursively through project directory and loads class files based on
     * filename match.
     *
     * @param string $className
     */
    public static function loader($className)
    {
        $directory = new RecursiveDirectoryIterator(static::$pathTop, RecursiveDirectoryIterator::SKIP_DOTS);
        if (is_null(static::$fileIterator)) {
            static::$fileIterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::LEAVES_ONLY);
        }
        $filename = $className . static::$fileExt;
        foreach (static::$fileIterator as $file) {
            if (strtolower($file->getFilename()) === strtolower($filename)) {
                if ($file->isReadable()) {
                    include_once $file->getPathname();
                }
                break;
            }
        }
    }
    /**
     * Sets the $fileExt property
     *
     * @param string $fileExt The file extension used for class files.  Default is "php".
     */
    public static function setFileExt($fileExt)
    {
        static::$fileExt = $fileExt;
    }
    /**
     * Sets the $path property
     *
     * @param string $path The path representing the top level where recursion should
     *                     begin. Defaults to the current directory.
     */
    public static function setPath($path)
    {
        static::$pathTop = $path;
    }
}

ORMAutoloader::setFileExt('.php');
spl_autoload_register('ORMAutoloader::loader');
// EOF

 

5. Modifikasi pada file config codeigniter

silahkan modifikasi file config codeigniter yang terletak pada folder project_root/application/config/config.php dengan ditambahkan kode berikut :

$appFolder = explode('/',$_SERVER['REQUEST_URI']);
defined('PARENTPATH') or define('PARENTPATH', $_SERVER['DOCUMENT_ROOT'].'/'.$appFolder[1]);

require_once(PARENTPATH.'/vendor/autoload.php');
require_once(PARENTPATH.'/application/config/orm_config.php');
require_once(PARENTPATH.'/orm/autoload/ORMAutoloader.php');

sudah selesai konfigurasinya bro, sekarang kita akan menggunakan paris orm ini caranya adalah sebagai berikut :

1. Buat file baru yang merepresentasikan nama tabel anda di folder project_root/orm/ misalnya  project_root/orm/BukuORM.php

oh iya, pastikan bahwa struktur tabel anda memiliki satu kolom id (autoincrement) dan bertindak sebagai primary_key agar mempermudah kompabilitas paris orm ini, walaupun sebenarnya bisa ko jika tanpa primary_key id atau primary key di tabel anda bukanlah kolom id. Caranya dengan menambahkan konfigurasi sebagai berikut :

<?php
class AnggotaORM extends Model {
    public static $_table = 'anggota';
    public static $_id_column = 'my_id_column';

}

2. Sekarang kita dapat menggunakan ParisORM misalnya saya menggunakan fitur tersebut di controller/anggota.php

<?php

class Anggota extends CI_Controller {

    public function __construct() {
        parent::__construct();

        //load database ini bisa di autoload agar otomatis terload 
        $this->load->database();
  
    }

    public function save() {

        $anggota = AnggotaORM::create();
        $anggota->nama = 'navotera';
        $anggota->email = 'navotera@gmail.com';
        $anggota->save();

        //untuk mengakses hasil input id
        echo $anggota->id;
    }


    //untuk update 
    public function update(int $id) {

        $anggota = AnggotaORM::find_one($id);
        $anggota->nama = 'share-system.com';
        $anggota->email = 'hendra@poliban.ac.id';
        $anggota->save();

        //untuk mengakses hasil input id
        echo $anggota->id;
    }


    public function list()
    {
        $data['list'] = AnggotaORM::find_many();
        
        $this->load->view('V_anggota_list', $data);

        //contoh di halaman view diatas
        foreach($list as $anggota)
        {
            echo $anggota->nama;
        }

    }

}

That’s it bro…
Artikel Berikutnya akan diberikan tutorial cara penggunaan relasi antar tabel dan memanfaatkan raw query dengan menggunakan Paris ORM.silahkan like fb kami di :  https://www.facebook.com/sharesystemtech/
untuk mendapatkan notifikasi kelanjutan artikelnya.

Terima Kasih sudah membaca bro, silahkan share kepada yang membutuhkan
Keep Calm and Code

Leave a Comment

Your email address will not be published.