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. Intinya: Kalau berkaitan tentang data, itu tugasnya model. Cara Membuat Model dan AturannyaModel 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 FileNama 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 ClassClass 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 MethodNama 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 ModelBaiklah, sekarang mari kita latihan menggunakan model. Tapi sebelum itu, lakukan ini: 1. Membuat DatabaseSilahkan 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.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: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: Setelah itu klik Kirim. Database dan tabel sudah selesai, berikutnya kita lakukan konfigurasi di Codeigniter agar bisa terhubung dengan database. 2. Konfigurasi DatabasePertama, 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: 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 ArticleBuatlah 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 ControllerSekarang buka kembali controller $autoload['libraries'] = array('database'); 4 dan ubah kodenya menjadi seperti ini:<?php
class Product_model extends CI_Model
{
} 0Pada kode di atas kita menggunakan dua method, yakni: 5. Menampilkan Data di ViewBerikutnya, 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
{
} 2Coba 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 ArtikelPada 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
{
} 3Nah, 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
{
} 4Dengan route ini, artikel akan bisa kita buka melalui URL: <?php
class Product_model extends CI_Model
{
} 5Sekarang mari kita coba! 7. PercobaanCobalah 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: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.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.Atau kalau mau cepat, bisa jalankan kode SQL berikut: <?php
class Product_model extends CI_Model
{
} 6Nah sekarang kita punya satu artikel yang sudah terbit. Coba lihat hasilnya di halaman list artikel: Coba klik link artikel tersebut, maka kita akan membuka halaman show artikel. 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
{
} 7Maka hasilnya: 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 ModelKita 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 FeedbackBuatlah 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
{
} 8Sehingga sekarang kita punya tabel seperti ini: Berikutnya, kita akan membuat Model untuk tabel feedback. 2. Membuat Model FeedbackSilahkan 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
{
} 9Pada 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 ControllerBuka 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()
{
}
} 0Coba 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 ThanksBuatlah 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()
{
}
} 1View ini cuma bertugas untuk menampilkan pesan feedback saat berhasil mengirim data dari form contact. Oke sekarang, mari kita coba.. 4. PercobaanBukalah 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.Kemudian cobalah isi form tersebut dan kirim. Jika tampil view Thanks berarti berhasil disimpan. Untuk memastikan, apakah benar berhasil disimpan atau tidak.. ..coba buka tabel Access denied for user 'root'@'localhost' 4 di Phpmyadmin.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.
|