Cara menggunakan search object in php

In PHP 5+, objects are passed by reference. This has got me into trouble in the past when I've tried to make arrays of objects.
For example, I once wrote something like the following code, thinking that I'd get an array of distinct objects. However, this is wrong. This code will create an array of multiple references to the same object.

  class myNumber
  {
    public $value;
  }

  $arrayOfMyNumbers = array();
  $arrayItem = new myNumber();
  for( $i = 0; $i<3; $i++ ) {
    $arrayItem->value = $i;
    $arrayOfMyNumbers[] = $arrayItem;
  }

  var_dump($arrayOfMyNumbers);
?>

output:
array(3) {
  [0]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
  [1]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
  [2]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
}

notice that the value at each index in the array is the same. That is because the array is just 3 references to the same object, but we change the property of this object every time the for loop runs. This isn't very useful. Instead, I've changed the code below so that it will create an array with three distinct references to three distinct objects. (if you're having a hard time understanding references, think of this as an array of objects, and that this is just the syntax you have to use.)

  class myNumber
  {
    public $value;
  }

  $arrayOfMyNumbers = array();
  for( $i = 0; $i<3; $i++ ) {
    $arrayItem = new myNumber();
    $arrayItem->value = $i;
    $arrayOfMyNumbers[] = $arrayItem;
  }

  var_dump($arrayOfMyNumbers);
?>

output:
array(3) {
  [0]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(0)
  }
  [1]=>
  object(myNumber)#2 (1) {
    ["value"]=>
    int(1)
  }
  [2]=>
  object(myNumber)#3 (1) {
    ["value"]=>
    int(2)
  }
}

  class myNumber
  {
    public $value;
  }
0

Setelah kita belajar tentang Controller dan View, berikutnya kita akan belajar tentang Model dan database.

Pada tutorial ini kita akan belajar tentang:

  • Apa itu Model?
  • Bagaimana cara menulis model yang benar?
  • dan latihan menggunakan model untuk menampilkan dan insert data.

Mari kita mulai..

Apa itu Model?

Model adalah kode yang bertugas untuk membuat pemodelan data. Kadang juga dipakai untuk pemodelan logika bisnis.

Model bisa mengakses data dari Database dan juga sumber lainnya. Seperti API pihak ketiga.

Cara menggunakan search object in php

Intinya:

Kalau berkaitan tentang data, itu tugasnya model.

Cara Membuat Model dan Aturannya

Model dapat kita buat di dalam folder

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
2, aturan penulisan model hampir sama dengan controller.

1. Penulisan Nama File

Nama file model harus menggunakan huruf besar atau kapital di awal dan jika terdiri dari dua suku kata atau lebih, bisa dipisah dengan underscore.

Contoh:

📜 Arcticle_model.php
📜 Product_model.php
📜 Account_model.php

Penamaan file model dengan akhiran

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
3 boleh dilakukan boleh juga tidak, tujuan memberikan akhiran
php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
3 adalah untuk menghindari bentrok dengan nama Controller.

2. Penulisan Nama Class

Class model harus melakukan extends dari class

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
5.

Nama class mengukuti nama file, yakni diawali dengan huruf besar dan boleh dipisah dengan underscore.

Contoh:

php

class Product_model extends CI_Model
{

}

3. Penulisan Nama Method

Nama method diawali dengan huruf kecil dan jika terdiri dari dua suku kata, boleh dipisah dengan underscore.

Contoh:

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}

4. Apa yang ditulis di dalam Model?

Di dalam model, kita harus menulis query untuk mengambil data di database dan mengembalikan hasil query berupa data. Nilai kembalian boleh berupa array maupun objek.

Contoh:

php

class Product_model extends CI_Model
{
	public function find()
  {
    $query = $this->db->get_where('table_name', ['id' => $id]);
    return $query->row(); // return berupa satu object
  }
  public function get_expired_product()
  {
    $query = $this->db->query("SELECT * FROM table WHERE expired=1");
    return $query->result(); // return berupa array objek
  }
}

Selain itu, ada juga yang menulis logika bisnis di dalam model.

Contohnya:

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}

Pada contoh ini model menerima input dari argumen yang diberikan melalui method seperti

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
6,
php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
7, dan
php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
8.

Lalu di simpan dengan query

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
9.

Dari mana asalnya query

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
9?

Query ini berasal dari library Query Builder di Codeigniter.

Apa itu Query Build?

Query Builder adalah class yang berisi method untuk membuat query database.

Contoh:

  • php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    1 untuk menambahkan data ke tabel;
  • php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    2 untuk mengambil data dari tabel, sama seperti query
    php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    3.
  • php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    4 untuk update data di tabel;
  • php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    5 untuk menghapus data di tabel;
  • php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    6 untuk mengambil data dengan
    php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    7;

Selain method-method ini, masih banyak lagi method lain yang disediakan Query Builder untuk membuat query database.

Selengkapnya kamu bisa baca di Dokumentasi Query Builder.

5. Apa yang tidak boleh dilakukan di Model?

Jika kamu sudah tahu tugas model, tentunya juga tau apa yang tidak boleh dilakukan di model.

Misalnya seperti:

  • Melakukan load view di dalam model 🤦‍♂️;
  • Mengambil alih tugas Controller seperti mengakses fungsi
    php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    8 dan
    php
    
    class Product_model extends CI_Model
    {
    	public function find()
      {
        $query = $this->db->get_where('table_name', ['id' => $id]);
        return $query->row(); // return berupa satu object
      }
      public function get_expired_product()
      {
        $query = $this->db->query("SELECT * FROM table WHERE expired=1");
        return $query->result(); // return berupa array objek
      }
    }
    9 di dalam model;

Hal-hal tersebut, bisa dilakukan di dalam model. Tapi sangat disarankan agar tidak melakukannya.

Karena nanti akan mengakibatkan model jadi berantakan dan sulit ditest dengan unit test.

🧑‍💻 Latihan: Menggunakan Model

Baiklah, sekarang mari kita latihan menggunakan model.

Tapi sebelum itu, lakukan ini:

1. Membuat Database

Silahkan buat dulu database di PHPmyadmin. Buatlah database dengan nama

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
0.

Cara menggunakan search object in php

Setelah itu buatlah tabel dengan name

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
1 dengan struktur sebagai berikut:

Cara menggunakan search object in php

Atau biar cepat gunakan perintah SQL berikut:

CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 

Ketik perintahnya di menu SQL:

Cara menggunakan search object in php

Setelah itu klik Kirim.

Database dan tabel sudah selesai, berikutnya kita lakukan konfigurasi di Codeigniter agar bisa terhubung dengan database.

2. Konfigurasi Database

Pertama, silahkan lakukan autoload library database.

Caranya:

Buka file

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
2, kemudian pada bagian
php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
3 isi nilainya seperti ini:

$autoload['libraries'] = array('database');

Setelah itu lakukan konfigurasi databasenya:

Bukalah file

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
4 kemudian ubah konfigurasi databasenya menjadi seperti ini:

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

Perhatikan,

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
5 diisi dengan
php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
6 karena kita akan menggunakan server database dari XAMPP atau di localhost.

Untuk

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
7 kita isi pakai
php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
8, karena default username database di XAMPP adalah
php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
8 dan passwordnya kosong.

Tapi jika kamu sudah pernah mengubah username dan password, silahkan diisi dengan usernmae dan password tersebut.

Terakhir, kita mengisi

CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 
0 yang merupakan nama database yang akan digunakan.

Nah, sekarang coba buka kembali aplikasinya dari

CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 
1, kalau tidak ada yang error berarti konfigurasi databasenya sudah benar.

Tapi kalau error seperti ini:

Cara menggunakan search object in php

Artinya konfigurasinya belum benar.

Pada error di atas, dapat kita ketahui penyebabnya karena:

Access denied for user 'root'@'localhost'

Yang artinya username

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
8 tidak bisa dipakai pada server yang digunakan. Cobalah untuk mengubahnya dengan user yang valid.

3. Membuat Model Article

Buatlah file baru di dalam folder

CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 
3 dengan nama
CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 
4.

Kemudian isi dengan kode berikut:

php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}

Untuk saat ini,

CREATE TABLE `beritacoding`.`article` ( 
  `id` VARCHAR(32) NOT NULL , 
  `title` VARCHAR(128) NULL , 
  `slug` VARCHAR(128) NOT NULL , 
  `content` TEXT NULL , 
  `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB; 
5 cuma kita gunakan untuk mengambil data dengan dua method:

  • CREATE TABLE `beritacoding`.`article` ( 
      `id` VARCHAR(32) NOT NULL , 
      `title` VARCHAR(128) NULL , 
      `slug` VARCHAR(128) NOT NULL , 
      `content` TEXT NULL , 
      `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
      `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
      PRIMARY KEY (`id`)
    ) ENGINE = InnoDB; 
    6 untuk mengambil semua artikel yang statusnya terbit (
    CREATE TABLE `beritacoding`.`article` ( 
      `id` VARCHAR(32) NOT NULL , 
      `title` VARCHAR(128) NULL , 
      `slug` VARCHAR(128) NOT NULL , 
      `content` TEXT NULL , 
      `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
      `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
      PRIMARY KEY (`id`)
    ) ENGINE = InnoDB; 
    7). Parameter
    CREATE TABLE `beritacoding`.`article` ( 
      `id` VARCHAR(32) NOT NULL , 
      `title` VARCHAR(128) NULL , 
      `slug` VARCHAR(128) NOT NULL , 
      `content` TEXT NULL , 
      `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
      `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
      PRIMARY KEY (`id`)
    ) ENGINE = InnoDB; 
    8 dan
    CREATE TABLE `beritacoding`.`article` ( 
      `id` VARCHAR(32) NOT NULL , 
      `title` VARCHAR(128) NULL , 
      `slug` VARCHAR(128) NOT NULL , 
      `content` TEXT NULL , 
      `draft` ENUM('true','false') NOT NULL DEFAULT 'true' ,
      `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
      PRIMARY KEY (`id`)
    ) ENGINE = InnoDB; 
    9 berfungsi untuk menentukan banyak data yang harus diambil. Ini memang belum kita butuhkan saat ini, tapi nanti kita akan pakai saat membuat pagination.
  • $autoload['libraries'] = array('database');
    0 untuk mengambil satu artikel dengan slug tertentu,

Nanti kita juga akan tambahkan method-method lain seperti

$autoload['libraries'] = array('database');
1,
php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
9, dan
$autoload['libraries'] = array('database');
3.

Sekarang kita lanjut dulu ke:

4. Menggunakan Model di Controller

Sekarang buka kembali controller

$autoload['libraries'] = array('database');
4 dan ubah kodenya menjadi seperti ini:

php

class Product_model extends CI_Model
{

}
0

Pada kode di atas kita menggunakan dua method, yakni:

  • $autoload['libraries'] = array('database');
    5 untuk menampilkan list artikel;
  • dan
    $autoload['libraries'] = array('database');
    6 untuk menampilkan satu artikel dengan slug tertentu.

5. Menampilkan Data di View

Berikutnya, ubahlah kode view

$autoload['libraries'] = array('database');
7 dan
$autoload['libraries'] = array('database');
8 masing-masing menjadi seperti ini:

📜

$autoload['libraries'] = array('database');
9

php

class Product_model extends CI_Model
{

}
1

📜

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
0

php

class Product_model extends CI_Model
{

}
2

Coba perhatikan kode di atas, di sana kita menggunakan fungsi

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
1, fungsi ini bertujuan untuk mencegah XSS attack.

Kita juga menggunakan fungsi

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
2 untuk membuat link.

Sekarang semuanya view sudah siap, mari kita lanjut ke:

6. Membuat Route untuk Artikel

Pada Controller, kita menggunakan method

$autoload['libraries'] = array('database');
6 untuk menampilkan artikel.

Method ini nantinya akan bisa dibuka melalui:

php

class Product_model extends CI_Model
{

}
3

Nah, biar lebih enak dilihat.. kita tidak akan menggunakan

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
4.

Karena itu, kita harus membuat custom route.

Mari kita buat!

Bukalah file

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
5.

Kemudian tambahkan kode berikut:

php

class Product_model extends CI_Model
{

}
4

Dengan route ini, artikel akan bisa kita buka melalui URL:

php

class Product_model extends CI_Model
{

}
5

Sekarang mari kita coba!

7. Percobaan

Cobalah buka halaman

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
6. Jika kita belum menambahkan artikel di tabel
php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
1 maka akan tampil seperti ini:

Cara menggunakan search object in php

Sekarang coba tambahkan data di tabel

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
1 melalui Phpmyadmin.

Cara menggunakan search object in php

Silahkan isi data artikel yang akan ditambahkan dan jangan lupa berikan nilai

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'beritacoding',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);
9 untuk kolom
Access denied for user 'root'@'localhost'
0.

Cara menggunakan search object in php

Atau kalau mau cepat, bisa jalankan kode SQL berikut:

php

class Product_model extends CI_Model
{

}
6

Nah sekarang kita punya satu artikel yang sudah terbit.

Coba lihat hasilnya di halaman list artikel:

Cara menggunakan search object in php

Coba klik link artikel tersebut, maka kita akan membuka halaman show artikel.

Cara menggunakan search object in php

Keren 😍..

Tampilan list artikel dan show artikelnya memang masih belum rapi karena kita belum berikan CSS untuk elemen ini.

Kalau mau ditambahkan CSS untuk tampilan show artikel, silahkan tambahkan kode CSS berikut pada

Access denied for user 'root'@'localhost'
1.

php

class Product_model extends CI_Model
{

}
7

Maka hasilnya:

Cara menggunakan search object in php

Terlihat lebih bagus 👍

Silahkan tambahkan juga CSS sesukamu untuk tampilan yang lain. Karena pada tutorial ini, kita tidak fokus pada CSS, melainkan pada konsep Codeigntier.

Oke lanjut..

🧑‍💻 Latihan: Insert Data ke Model

Kita sudah berhasil menampilkan data yang didapatkan dari model ke View.

Nah, sekarang.. bagaimana caranya menyimpan data ke model?

Gampang!

Kita bisa manfaatkan query

$autoload['libraries'] = array('database');
1.

Mari kita coba..

1. Membuat Tabel Feedback

Buatlah tabel baru di dalam database

php

class Account_model extends CI_Model
{
  public function deposit($deposit_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance + $deposit_count;
    $this->db->update($new_balance, ['id' => $id]);
  }

  public function withdraw($wd_count, $id)
  {
    $current_balance = $this->db->get_where('balance', ['id' => $id]);
    $new_balance = $current_balance - $wd_count;
    $this->db->update($new_balance, ['id' => $id]);
  }
}
0 dengan nama
Access denied for user 'root'@'localhost'
4.

Biar cepat, gunakan perintah SQL berikut:

php

class Product_model extends CI_Model
{

}
8

Sehingga sekarang kita punya tabel seperti ini:

Cara menggunakan search object in php

Berikutnya, kita akan membuat Model untuk tabel feedback.

2. Membuat Model Feedback

Silahkan buat file baru di dalam folder

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
2 dengan nama
Access denied for user 'root'@'localhost'
6 kemudian isi kodenya seperti ini:

php

class Product_model extends CI_Model
{

}
9

Pada model ini kita menggunakan query

$autoload['libraries'] = array('database');
1 untuk menambahkan data ke dalam tabel
Access denied for user 'root'@'localhost'
4.

Berikutnya silahkan lanjutkan ke:

3. Menggunakan Model pada Controller

Buka kembali Controller

Access denied for user 'root'@'localhost'
9, kemudian ubahlah isi method
php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}
0 menjadi seperti ini:

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
0

Coba perhatikan, di sana kita melakukan load view

php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}
1, view ini belum kita buat.

Karena itu mari kita:

4. Membuat View untuk Thanks

Buatlah file baru di dalam folder

php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}
2 dengan nama
php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}
3 dengan isi sebagai berikut:

php

class Product_model extends CI_Model
{
	public function find()
  {
    
  }
  public function get_expired_product()
  {
    
  }
}
1

View ini cuma bertugas untuk menampilkan pesan feedback saat berhasil mengirim data dari form contact.

Oke sekarang, mari kita coba..

4. Percobaan

Bukalah halaman

php

class Article_model extends CI_Model
{
	private $_table = 'article';

	public function get_published($limit = null, $offset = null)
	{
		if (!$limit && $offset) {
			$query = $this->db->get_where($this->_table, ['draft' => 'false']);
		} else {
			$query =  $this->db->get_where($this->_table, ['draft' => 'false'], $limit, $offset);
		}
		return $query->result();
	}

	public function find_by_slug($slug)
	{
		if (!$slug) {
			return;
		}
		$query = $this->db->get_where($this->_table, ['slug' => $slug]);
		return $query->row();
	}
}
4.

Cara menggunakan search object in php

Kemudian cobalah isi form tersebut dan kirim.

Cara menggunakan search object in php

Jika tampil view Thanks berarti berhasil disimpan.

Cara menggunakan search object in php

Untuk memastikan, apakah benar berhasil disimpan atau tidak..

..coba buka tabel

Access denied for user 'root'@'localhost'
4 di Phpmyadmin.

Cara menggunakan search object in php

Apa Selanjutnya?

Kita sudah belajar tentang model dan berhasil melakukan view dan insert data dengan Model.

Namun, yang belum kita coba adalah update dan delete data. Ini akan kita pelajari di tutorial berikutnya.

Apa itu object dalam PHP?

"Object" adalah turunan dari sebuah class, dan Anda dapat membuat banyak instance dari class yang sama. Sebagai contoh, ada class Person tunggal, tetapi banyak object Person dapat menjadi instance dari class ini — dan , zainab , hector , dll. Class mendefinisikan properti.

Apa yang dimaksud dengan tipe data object?

Tipe data object adalah tipe data yang tidak sekedar menyimpan data tetapi berisikan juga informasi bagaimana untuk mengolah data tersebut. Maksudnya, pada tipe data data lain seperti : integer, float, string hanya berisikan tipe data dia sendiri, sedangkan pada tipe data object dapat berisikan tipe-tipe data lain.

Apa yang dimaksud dengan array dalam php?

Dalam PHP, array adalah struktur data yang memungkinkan anda untuk menyimpan beberapa elemen dalam satu variabel.

Apa itu multidimensional array?

Multi-dimensional Array adalah array yang menyimpan array lain pada setiap indeks, bukan elemen tunggal. Dengan kata lain, kita dapat mendefinisikan array multi dimensi sebagai array dari suatu array.