Model

Kelas Model dalam Seme Framework merupakan kumpulan kode yang dibuat secara manual untuk berinteraksi dengan sistem database yang diturunkan dari kelas SENE_Model atau dari turunannya. Dengan dipisahkannya logika utama dengan logika untuk komunikasi dengan sistem database, diharapkan dapat meningkatkan reusability dan kerapihan penempatan file kode sumber.

Daftar Isi

Syarat dan Ketentuan

Berikut ini adalah syarat dan ketentuan yang harus dipenuhi ketika ingin menggunakan kelas Model dengan benar supaya dapat berjalan dengan baik.

Lokasi

Semua file model di simpan di dalam direktori app/model.

Pembuatan Direktori

Pembuatan direktori untuk model diperbolehkan selama masih di dalam app/model.

Struktur File dan Direktori Kelas Model

Berikut ini adalah contoh ilustrasi lokasi file dan direktori untuk kelas model

app/
└── model/
  ├── front/
  | ├── user_model.php
  | └── blog_model.php
  └── admin/
    ├── user_model.php
    └── blog_model.php

Aturan Penamaan

Ada beberapa aturan untuk penamaan kelas model. Namun biasanya, 1 kelas model merepresentasikan 1 tabel pada sistem database. Nama kelas dan nama file harus identik tapi tidak harus sama dalam kapitalisasi huruf (lowercase & uppercase). Aturan penamaan ini dibuat supaya kegunaan, nama file dan kelas model tidak ambigu.

Nama File

Untuk nama file, sesuaikan dengan nama tabel dan diberi akhiran _model.php. Nama file hanya boleh menggunakan huruf kecil (lowercase), angka dan underscore sebagai pemisah. Tapi tidak boleh diawali oleh angka dan underscore. Contoh nama tabelnya b_user jadi nama file modelnya b_user_model.php.

Nama Kelas

Nama kelas sesuaikan dengan nama tabel dan diberi akhiran _Model. Nama kelas hanya boleh menggunakan huruf, angka, dan underscore sebagai pemisah. Tapi tidak boleh diawali dengan angka atau underscore. Setiap awalan huruf dan atau setelah pemisah underscore dimulai dengan huruf kapital (uppercase). Contoh nama tabelnya b_user jadi nama kelas modelnya B_User_Model.

Jumlah Kelas dalam 1 file

Kelas model di Seme Framework hanya boleh menampung 1 kelas model dalam 1 file model. Contoh untuk tabel b_user pada file model b_user_model.php hanya memiliki kelas B_User_Model, tidak ada kelas model lainnya dalam satu file yang sama.

Turunan Kelas

Model harus menurunkan kelas dengan kode extends dari kelas SENE_Model. Begitupun juga ketika menggunakan fitur Core , kelas model core harus menurunkan dengan cara yang sama.

Konstruktor

Setiap kelas model wajib mendeklarasikan konstruktor kelas dan costructor parent-nya.

<?php
class Blog_Model extends SENE_Model{
  var $tbl = 'blog';
  var $tbl_as = 'b';
  public function __construct(){
    parent::__construct();
    ...
  }
  ...
}

Kelas SENE_Model

Kelas SENE_Model merupakan kelas dasar yang telah memiliki berbagai fungsi (metode) didalamnya untuk keperluan komunikasi dengan sistem databse untuk pembangunan aplikasi berbasis web menggunakan Seme Framework. Ada banyak metode dan properti yang telah tersedia pada kelas SENE_Model ini.

Sinopsis Kelas SENE_Model

Berikut ini adalah sinopsis atau gambaran isi kelas SENE_Model.

abstract class SENE_Model
{
    public $db;
    protected $directories;
    protected $config;
    public $field = array();

    public function __construct(){ ... }
    private function loadEngine($db) { ... }
    public function __encrypt($val) { ... }
    public function __decrypt($val) { ... }
    public function __decrypt($val) { ... }
}

Properti $db

Properti $db pada kelas SENE_Model berisikan properti dan metode untuk berinteraksi dengan sistem database. Adapun tujuan dari properti kelas ini adalah menghasilkan kode SQL yang cocok terhadap sistem database tertentu tanpa perlu menghafal kode SQL. Didalam properti ini juga ada kumpulan metode untuk melakukan proses Query Builder.

Query Builder

Query Builder merupakan kumpulan metode yang ada pada properti $db di dalam kelas SENE_Model yang dapat digunakan untuk menyusun kode SQL. Metode ini dapat digunakan secara berantai, dan diakhiri oleh metode pengakhiran seperti get , atau get_first , atau insert , atau update , atau delete .

Kegunaan Query Builder

Berikut ini adalah beberapa kegunaan dengan menggunakan query builder:

  • Mempercepat dan mempermudah proses pembuatan kelas model di Seme Framework.
  • Tidak usah menghafal urutan pengkodisian kode SQL. Query Builder urutan kondisinya bebas, selama diakhiri oleh metode pengakhiran.
  • Tidak usah ganti kode ketika ganti sistem database. Kode SQL untuk setiap sistem database berbeda. Dengan Query Builder ini akan otomatis memilihkan kode SQL yang cocok dengan sistem database yang dipakai.

Kelemahan Query Builder

Berikut ini adalah beberapa kelemahan dengan menggunakan query builder:

  • Query Builder terbatas, tidak sebebas query SQL secara manual.
  • Query Builder tidak dapat menjalankan query yang sangat kompleks.

Meskipun ada kelemahannya, Seme Framework telah menyediakan metode khusus sebagai alternatif untuk mengeksekusi kode SQL secara manual, yaitu dengan menggunakan metode Query .

Cara Menggunakan Query Builder

Berikut ini adalah beberapa cara penggunaan untuk Query Builder.

<?php
class Blog_Model extends SENE_Model{
  var $tbl = 'blog';
  var $tbl_as = 'b';
  public function __construct(){
    parent::__construct();
  }
  public function getAll(){
    $this->db->from($this->tbl,$this->tbl_as);
    return $this->db->get();
  }
  public function countAll(){
    $this->db->select_as('COUNT(*)','total',0);
    $this->db->from($this->tbl,$this->tbl_as);
    $d = $this->db->get_first();
    if(isset($d->total)) return $d->total;
    return 0;
  }
  public function getById($id){
    $this->db->where('id',$id);
    $this->db->from($this->tbl,$this->tbl_as);
    return $this->db->get_first();
  }
  public function set($di=array()){
    $this->db->insert($this->tbl,$di);
    return $this->db->last_id;
  }
  public function update($id,$du=array()){
    $this->db->where('id',$id);
    return $this->db->update($this->tbl,$du);
  }
  public function del($id){
    $this->db->where("id",$id);
    return $this->db->delete($this->tbl);
  }
}

Debug SQL

Seme Framework memiliki fitur atau penanda (flag) untuk melakukan debug terhadap query atau kode SQL yang dilakukan. Cukup menambahkan penanda 1 pada akhir parameter dari setiap metode yang digunakan.

  • $this->db->get('object',1)
  • $this->db->get_first('object',1)
  • $this->db->insert($this->tbl,$di,0,1)
  • $this->db->update($this->tbl,1);
  • $this->db->delete($this->tbl,1);