Tutorial Codeigniter 4 – Part 5 – Cara Membuat Model dan Interaksi Database melalui model di Codeigniter 4
Selamat datang di tutorial warung belajar, dalam tutorial ini kita akan melanjutkan pembahasan dari seri tutorial codeigniter 4, kita akan bahas terkait dengan model di codeigniter 4.
Model adalah bagian yang cukup penting di Codeigniter, dimana dengan model kita akan dapat berkomunikasi dengan database.
Pada Codeigniter 4 peran Model akan sedikit berbeda dengan Codeigniter 3, karena di Codeigniter 4 Model memiliki peran untuk dapat langsung berkomunikasi dengan database, tanpa kita membuat method didalam model itu sendiri seperti yang kita lakukan di Codeigniter 3, konsep seperti ini ada juga di Laravel dimana Model bisa dikatakan seperti representasi dari tabel yang ada didatabase.
Jadi dengan memanfaatkan peran dari model, anda bisa menampilkan seluruh data, mencari data tertentu, insert data, update data, dan hapus data di database, dengan perintah yang cukup sederhana, jika di laravel fitur ini kita kenal dengan nama eloquent.
Meskipun itu Codeigniter 4 masih memiliki fitur query builder, ataupun kita bisa juga menuliskan query secara manual, tapi fitur model ini cukup menjadikan perubahan yang baru yang dihadirkan di Codeigniter versi 4.
Baik beberapa hal yang akan kita bahas di tutorial kali ini adalah sebagai berikut :
- Cara Membuat Model
- Cara Mengakses Model
- Konfigurasi Model Agar Mengakses Database
- Bekerja dengan Data Melalui Model – FindAll
- Bekerja dengan Data Melalui Model – Find
- Bekerja dengan Data Melalui Model – FindColumn
- Bekerja dengan Data Melalui Model – First
- Bekerja dengan Data Melalui Model – withDeleted
- Bekerja dengan Data Melalui Model – onlyDeleted
- Bekerja dengan Data Melalui Model – Insert
- Bekerja dengan Data Melalui Model – Update
- Bekerja dengan Data Melalui Model – Save
- Bekerja dengan Data Melalui Model – Delete
- Bekerja dengan Data Melalui Model – PurgeDeleted
Pembahasannya Cukup Panjang Jadi Buat Teman – Teman bisa sambil ngopi ataupun sambil bawa cemilan.
Video Tutorial Belajar Codeigniter 4 – Cara Membuat Model dan Interaksi Database Melalui Model di Codeigniter 4
Buat teman – teman yang belajarnya terbiasa dengan nonton video, bisa melihat video tutorial youtube yang kita sediakan, Cara Membuat Model dan Interaksi Database Melalui Model di Codeigniter 4
Persiapkan Project Codeigniter
Sebelum kita membahas terkait dengan Model, pastikan teman – teman sudah menginstall Project Codeigniter di Komputer teman – teman, dalam contoh ini saya install dengan nama folder ci4app, untuk tutorial cara instalasi bisa dilihat di tutorial codeigniter 4 part – 1 : Cara Menginstall Codeigniter 4
Cara Membuat Model
Secara Default model di Codeigniter 4 disimpan didalam folder app/Models, baik silahkan buat sebuah file Model dengan nama ProductModel.php dan simpan didalam folder app/Models
Untuk isi dalam file ProductModel adalah sebagai berikut :
1 2 3 4 5 6 7 8 9 |
<?php namespace App\Models; use CodeIgniter\Model; class ProductModel extends Model { } |
Keterangan :
- Line 3 anda perlu menuliskan namespace App\Models
- Line 7 kita buat class ProductModel dengan extends class Model, untuk nama class ini sendiri harus sama dengan nama file Model, dalam contoh ini adalah ProductModel
Cara Mengakses Model
Setelah dibagian sebelumnya kita telah membuat sebuah model dengan nama ProductModel yang kita simpan didalam folder app/Models
Berikutnya kita akan belajar bagaimana cara mengakses Model tersebut, kita akan modifikasi terlebih dahulu method didalam ProductModel, kita tambahkan method getData, berikutnya kita akan belajar bagaimana cara mengakses method yang ada didalam model, melalui Controller.
Kita modifikasi sehingga model menjadi seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Models; use CodeIgniter\Model; class ProductModel extends Model { public function getData() { return 'Ini adalah Method getData didalam ProductModel'; } } |
Keterangan :
- Kita membuat method baru dengan nama getData Line 9, bagian ini kita buat sederhana saja, hanya return text dengan tulisan ‘Ini adalah Method getData didalam ProductModel’
berikutnya kita buat sebuah controller dengan nama Product kita simpan didalam folder app/Controllers
Untuk isi code controller Product adalah seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace App\Controllers; use App\Models\ProductModel; class Product extends BaseController { public function index() { $product = new ProductModel(); echo $product->getData(); } } |
Keterangan :
Line 5 kita load model dengan nama ProductModel, dengan perintah :
1 |
use App\Models\ProductModel; |
Line 7 kita membuat class dengan nama Product sesuai dengan nama controllernya yaitu Product
Pada method index, kita membuat object baru dengan nama $product (line 11) dengan menggunakan class ProductModel
line 12 kita mengakses method getData pada model productModel, kita gunakan object $product, kita gunakan perintah echo untuk menampilkan text hasil return dari method getData.
1 |
echo $product->getData(); |
Sekarang kita coba mengaksesnya, jangan lupa untuk menjalankan local development server, dengan perintah :
1 |
php spark serve |
lalu jalankan URL : http://localhost:8080/product
Maka hasilnya adalah sebagai berikut :
akan menampilkan tulisan “Ini adalah Method getData didalam ProductModel” yang merupakan return dari method getData di dalam ProductModel
Persiapan Database & Koneksikan Codeigniter dengan database
Sebagai bahan belajar terkait cara model dapat berinteraksi dengan database, kita akan buat sebuah database dengan nama db_product, dan didalamnya kita buat tabel dengan nama tb_product, untuk struktur tabel seperti berikut ini :
- kd_product (int) (primary key) (auto increment)
- name (varchar 255)
- price (float)
- created_at (datetime)
- updated_at (datetime)
- deleted_at (datetime)
untuk mempermudah teman – teman saya sediakan script SQL untuk membuat database serta tabelnya :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
-- phpMyAdmin SQL Dump -- version 5.0.2 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Generation Time: Aug 10, 2020 at 04:34 PM -- Server version: 10.4.11-MariaDB -- PHP Version: 7.4.5 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `db_product` -- CREATE DATABASE IF NOT EXISTS `db_product` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `db_product`; -- -------------------------------------------------------- -- -- Table structure for table `tb_product` -- CREATE TABLE `tb_product` ( `kd_product` int(11) NOT NULL, `name` varchar(255) NOT NULL, `price` float NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_product` -- ALTER TABLE `tb_product` ADD PRIMARY KEY (`kd_product`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_product` -- ALTER TABLE `tb_product` MODIFY `kd_product` int(11) NOT NULL AUTO_INCREMENT; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
baik saya asumsikan teman – teman semua sudah memiliki database yang didalamnya sudah ada tabelnya ya..
Koneksikan Codeigniter 4 dengan database
Berikutnya kita akan koneksikan project codeigniter 4 dengan database yang baru saja kita buat, langkah – langkahnya adalah sebagai berikut :
- Pada folder project codeigniter terdapat file dengan nama env, silahkan rename terlebih dahulu menjadi .env
- buka file .env pada bagian database di sekitar line 52 – 56 setting bagian database, sebelum itu hilangkan tanda #
- lalu lakukan settingan koneksi ke database jadi kurang lebih seperti berikut ini :
1 2 3 4 5 |
database.default.hostname = localhost database.default.database = db_product database.default.username = root database.default.password = database.default.DBDriver = MySQLi |
- bagian hostname adalah alamat server dari databasenya, dalam hal ini adalah localhost
- bagian database diisi dengan nama database, dalam hal ini adalah db_product
- bagian username diisi dengan user dari database, dalam hal ini adalah root
- bagian password diisi dengan password dari username tersebut, dalam hal ini saya kosongkan karena default password dibagian mysql pada xampp itu kosong untuk user root
- DBDriver kita isikan MySQLi karena kita pakai MySQL / Maria DB sebagai databasenya
Konfigurasi Model agar dapat mengakses database
Setelah dibagian sebelumnya kita telah belajar, bagaimana membuat model, serta mengakses model dan method didalamnya melalui controller, berikutnya kita akan belajar untuk mensetting bagian model, agar dapat mengakses database.
Berikutnya kita akan belajar konfigurasi apa saja yang bisa kita setting dibagian model :
$DBGroup = digunakan untuk menentukan group database mana yang akan digunakan, nama group database ini bisa anda lihat di konfigurasi database, bisa anda lihat di file .env, jika anda tidak setting bagian DBGroup maka akan menggunakan default database yang disetting di bagian konfigurasi database.
$table = bagian ini diisi dengan nama tabel di database, dimana model ini dapat berkomunikasi dengan nama tabel yang ditulis dibagian ini.
$primaryKey = digunakan untuk menentukan primary key dari tabel yang dapat diakses oleh model ini, kolom dibagian primaryKey akan digunakan untuk dasar pencarian menggunakan method find, method find akan kita bahas lebih lanjut ditutorial berikutnya.
$returnType = digunakan untuk mengatur format return data hasil dari query, anda bisa menuliskan value array ataupun object.
$useSoftDeletes = jika bernilai true, maka ketika ada data yang dihapus, akan menyimpan waktu kapan data dihapus dalam format datetime dalam kolom dengan nama deleted_at didalam tabel, secara sederhana seakan – akan ketika data dihapus, data tidak benar – benar hilang, data berada di semacam recycle bin, dimana nantinya data bisa kita restore, ataupun kita kita hapus secara permanen.
jika bernilai true, ketika kita menggunakan method find ataupun findAll hanya menampilkan data yang tidak dalam keadaan terhapus, kecuali anda juga menambahkan perintah withDeleted() maka akan menampilkan keseluruhan data termasuk yang dalam keadaan telah dihapus.
$allowedFields = digunakan untuk menentukan kolom mana saja yang dapat kita insert data, baik menggunakan method insert, ataupun
$useTimestamps = jika bernilai true, maka setiap ada perubahan di database seperti insert dan update data, maka waktu akan dicatat dalam kolom created_at dan updated_at
$createdField = digunakan untuk mengatur kolom mana yang akan digunakan untuk menyimpan waktu dalam format datetime saat data ditambahkan (anda bisa mengosongi bagian ini kecuali bagian $useTimestamps dalam keadaan enable )
$updatedField = digunakan untuk mengatur kolom mana yang akan digunakan untuk menyimpan waktu dalam format datetime saat data diupdate (anda bisa mengosongi bagian ini kecuali bagian $useTimestamps dalam keadaan enable )
$deletedField = digunakan untuk mengatur kolom mana yang akan digunakan untuk menyimpan waktu dalam format datetime saat data didelete
$dateFormat = nilai dibagian ini akan menentukan format tanggal dan waktu yang disimpan, saat anda mengaktifkan bagian $useTimestamps dan $useSoftDeletes, secara default menggunakan format DATETIME, tetapi anda bisa menggunakan format lainnya seperti datetime, date, int (a PHP timestamp)
$validationRules = bagian ini bisa anda gunakan untuk membuat sebuah aturan terhadap format data yang akan diinsert ataupun diupdate ke database, untuk bagian ini akan kita singgung sedikit saja, karena ada pembahasan lebih lanjutnya di part pembahasan mengenai validasi.
$validationMessages = bagian ini digunakan untuk mengatur pesan yang ditampilkan saat data tidak sesuai dengan validationRules
$skipValidation = bagian ini dapat berisi true atau false, secara default bernilai false yang artinya data yang masuk harus melewati tahap validasi, tetapi jika anda memberikan nilai true, maka data yang masuk tidak perlu melalui bagian validasi.
Baik berikutnya silahkan buka file model dengan nama ProductModel.php, lalu modifikasi kode seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?php namespace App\Models; use CodeIgniter\Model; class ProductModel extends Model { protected $table = 'tb_product'; protected $primaryKey = 'kd_product'; protected $returnType = 'object'; protected $useSoftDeletes = true; protected $allowedFields = ['name', 'price']; protected $useTimestamps = true; protected $createdField = 'created_at'; protected $updatedField = 'updated_at'; protected $deletedField = 'deleted_at'; protected $validationRules = [ 'name' => 'required|min_length[3]', 'price' => 'required|numeric', ]; protected $validationMessages = [ 'name' => [ 'required' => 'Bagian Name Harus diisi', 'min_length' => 'Minimal 3 Karakter' ], 'price' => [ 'required' => 'Bagian Price Harus diisi', 'numeric' => 'Hanya bisa diisi dengan angka' ] ]; protected $skipValidation = false; public function getData() { return 'Ini adalah Method getData didalam ProductModel'; } } |
Keterangan :
1 |
protected $table = 'tb_product'; |
Line 9 kita set agar model ini dapat berkomunikasi dengan tabel “tb_product”
1 |
protected $primaryKey = 'kd_product'; |
Line 10 kita primary dari tabel tb_product adalah kolom “kd_product”
1 |
protected $returnType = 'object'; |
Line 12 kita set untuk format return hasil query adalah object
1 |
protected $useSoftDeletes = true; |
Line 13 kita set useSoftDeletes bernilai true, agar data yang dihapus tidak benar benar dihapus.
1 |
protected $allowedFields = ['name', 'price']; |
line 15 kita set untuk kolom yang dapat di insert atau diupdate adalah kolom name, dan price
1 |
protected $useTimestamps = true; |
line 17 kita set bagian useTimestamps kita set true agar mencatat bagian created_at dan updated_at
1 |
protected $createdField = 'created_at'; |
Line 18 untuk setting waktu insert data disimpan di kolom created_at
1 |
protected $updatedField = 'updated_at'; |
Line 19 untuk setting waktu update data disimpan di kolom updated_at
1 |
protected $deletedField = 'deleted_at'; |
Line 20 untuk setting waktu delete data disimpan di kolom deleted_at
untuk 3 settingan diatas, jika tidak diset maka akan memberikan nilai default :
- kolom yang menyimpan waktu insert data adalah created_at
- kolom yang menyimpan waktu update data adalah updated_at
- kolom yang menyimpan waktu delete data adalah deleted_at
1 2 3 4 |
protected $validationRules = [ 'name' => 'required|min_length[3]', 'price' => 'required|numeric', ]; |
- kolom nama harus diisi (required) dan minimal 3 karakter
- kolom price harus diisi (required) dan menggunakan angka
1 2 3 4 5 6 7 8 9 10 |
protected $validationMessages = [ 'name' => [ 'required' => 'Bagian Name Harus diisi', 'min_length' => 'Minimal 3 Karakter' ], 'price' => [ 'required' => 'Bagian Price Harus diisi', 'numeric' => 'Hanya bisa diisi dengan angka' ] ]; |
1 |
protected $skipValidation = false; |
Sebenarnya kita tidak perlu memberikan settingan sebanyak ini, tapi karena saya ingin menjelaskan ke teman – teman terkait dengan konfigurasi yang memungkinkan untuk dilakukan di bagian model sehingga semuanya saya tuliskan.
Perintah Insert Data
Berikutnya kita akan mulai belajar untuk melakukan komunikasi data dengan database dengan menggunakan model, kita mulai belajar dengan menggunakan method insert(), method ini digunakan untuk insert data ke database.
untuk dapat melakukan insert data, anda bisa menggunakan associative array, dimana key yang digunakan disamakan dengan nama kolom di tabel.
silahkan buka file controller Product.php, lalu kita tambahkan method baru semisal dengan nama insertdata, method insertdata seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function insertdata() { $product = new ProductModel(); $insert = $product->insert([ 'name' => 'Redmi Note 9 Pro', 'price' => '3499000' ]); if ($insert) { echo "Data Berhasil diinsert"; } else { echo "<pre>"; echo print_r($product->errors()); echo "</pre>"; } } |
Keterangan :
Line 1 kita buat method baru semisal dengan nama insertdata
1 |
$product = new ProductModel(); |
Line 3 kita buat object dengan nama $product menggunakan class ProductModel
1 2 3 4 |
$insert = $product->insert([ 'name' => 'Redmi Note 9 Pro', 'price' => '3499000' ]); |
kita mengakses method insert dengan menggunakan object $product, kita menggunakan array associative, dimana key sesuai dengan nama kolom yang ada di tabel tb_product, dan hasil query kita simpan di variabel $insert
1 2 3 4 5 6 7 |
if ($insert) { echo "Data Berhasil diinsert"; } else { echo "<pre>"; echo print_r($product->errors()); echo "</pre>"; } |
Line 8 kita cek value variabel $insert dengan menggunakn perintah IF, jika query berhasil maka akan menampilkan tulisan “Data berhasil diinsert“, Jika query gagal akan menjalankan Line 11 – 13 untuk menampilkan untuk menampilkan error massage dari validasi, jika memang yang gagal adalah dibagian validasi
sebenarnya perintahnya tidak sepanjang ini, tapi disini saya akan contohkan jika kita ingin melakukan pengecekan terhadap validasinya, dan jika validasi gagal akan menampilkan pesan error.
baik kita coba mengakses method insertdata di controller Product, dengan menggunakan URL :
localhost:8080/product/insertdata
lalu coba cek data di dalam tabel tb_product, bisa gunakan sql editor, dalam contoh ini saya menggunakan sqlyog
Maka ada satu data dengan name Redmi Note 9 Pro, dan untuk bagian price 3499000
Perintah Update Data
Berikutnya kita akan membahas method update, method ini digunakan untuk update data, method ini memiliki 2 parameter :
- nilai dari kolom primary key data yang ingin diupdate
- perubahan data yang ingin dilakukan, dalam bentuk associative array
berikutnya kita akan coba mengupdate data yang barusan kita insert, kita akan menambahkan method baru di controller Product, semisal nama methodnya updatedata, isi dari method updatedata adalah seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function updatedata() { $product = new ProductModel(); $id = 1; $update = $product->update($id, [ 'name' => 'Redmi Note 9', 'price' => '3000000' ]); if ($update) { echo "Data Berhasil diupdate"; } else { echo "<pre>"; echo print_r($product->errors()); echo "</pre>"; } } |
Keterangan :
Line 1 kita membuat method dengan nama updatedata
Line 3 kita membuat object baru dengan nama $product dengan class ProductModel
Line 4 kita buat variabel $id dengan value 1, ini adalah nilai dari kolom kd_product (yang merupakan primary key) yang akan dijadikan parameter pertama method update, karena data yang akan kita update adalah data yang memiliki kd_product = 1
1 2 3 4 |
$update = $product->update($id, [ 'name' => 'Redmi Note 9', 'price' => '3000000' ]); |
Line 5 kita gunakan method update pada object $product, dan mengirimkan 2 parameter yaitu :
- variabel $id
- array associative dari data yang akan diupdate
hasilnya akan kita simpan didalam variabel $update.
1 2 3 4 5 6 7 |
if ($update) { echo "Data Berhasil diupdate"; } else { echo "<pre>"; echo print_r($product->errors()); echo "</pre>"; } |
Line 9 kita akan memeriksa hasil query yang disimpan di variabel $update, jika proses berhasil maka akan tampil tulisan “Data Berhasil diupdate”
Line 13 jika proses gagal, maka akan menampilkan pesan error dari hasil validasi jika yang gagal memang di bagian validasi
Berikutnya kita coba mengakses method updatedata di controller Product dengan menggunakan URL :
localhost:8080/product/updatedata
jika proses update berhasil akan tertulis :
Data Berhasil diupdate
berikutnya kita akan cek data di table tb_product , saya gunakan sql yog
maka datanya sudah berubah, name menjadi “Redmi Note 9” dan untuk bagian price menjadi “3000000”
Perintah Save
Method save ini memiliki fungsi yang cukup unik,,, bisa digunakan untuk fitur insert data ataupun update data, tergantung isi array associative yang kita buat, jika kita menyertakan kolom yang menjadi primary key maka akan dianggap mengupdate data , tetapi jika tidak menyertakan maka akan dianggap sebagai proses insert data
Method Save untuk update data
Baik kita akan mulai pembahasannya bagaimana kalau method save digunakan untuk update data, anda perlu primary key dibagian array associative, dalam contoh ini kita akan menambahkan method dengan nama saveupdate dibagian controller Product, method saveupdate adalah sebagai berikut :
1 2 3 4 5 6 7 8 9 10 |
public function saveupdate() { $product = new ProductModel(); $data = [ 'kd_product' => 1, 'name' => 'Redmi 9', 'price' => '2000000' ]; $product->save($data); } |
Keterangan :
- Line 3 kita buat object dengan nama $product dengan class ProductModel
- Line 4 – 8 kita buat array associative dengan key kd_product(primary key),name, dan price
- Array associative berisi key dari kolom primary key, dan juga data yang akan diupdate
- Line 9 kita gunakan method save dibagian object $product, dengan mengisikan parameternya adalah array associative
kita coba mengakses method saveupdate yang barusan kita buat dengan menggunakan alamat URL : localhost:8080/product/saveupdate
lalu periksa data didatabase harusnya data dengan kd_product = 1 akan berubah, name menjadi “Redmi 9” dan untuk bagian price “2000000”
Method Save untuk insert data
Berikutnya kita akan coba untuk menggunakan method save untuk kebutuhan insert data, seperti yang dijelaskan diawal, perbedaannya jika untuk kebutuhan insert data anda tidak perlu menuliskan kolom primary key dibagian array associative.
dalam contoh ini kita akan membuat method baru di contoller Product, semisal kita beri nama saveinsert, untuk isi methodnya adalah sebagai berikut :
1 2 3 4 5 6 7 8 9 |
public function saveinsert() { $product = new ProductModel(); $data = [ 'name' => 'Xiaomi Mi Note 10 Pro', 'price' => '10999000' ]; $product->save($data); } |
Keterangan :
- Line 3 kita buat object baru dengan nama $product dengan menggunakan class ProductModel
- Line 4 – 7 kita buat data array associative dengan key name, dan price sesuai nama kolom di tabel tb_product
- Line 8 kita gunakan method save dengan object $product, dan menyertakan variabel $data yang berisi array untuk digunakan dibagian sebagai parameter method save
berikutnya kita coba mengakses method saveinsert dengan menggunakan URL :
localhost:8080/product/saveinsert
maka hasilnya akan ada data baru di tabel tb_product, sehingga kurang lebih seperti berikut ini :
Method Save untuk update tanpa array
Berikutnya kita akan bahas untuk cara update data menggunakan method save, tapi yang berbeda didisini kita tidak perlu menggunakan array, baik sebagai contoh kita akan membuat method baru dengan nama saveupdate2 di controller Product, untuk isi dari method saveupdate2 kurang lebih seperti berikut ini :
1 2 3 4 5 6 7 |
public function saveupdate2() { $product = new ProductModel(); $dataProduct = $product->find(1); $dataProduct->price = '2050000'; $product->save($dataProduct); } |
Keterangan :
- Line 3 kita buat object baru dengan nama $product dengan menggunakan class ProductModel
- Line 4 kita mendapatkan data product dengan kd_product = 1, dengan menggunakan perintah method find, pembahasan find akan ada dibab selanjutkan, hasil pencairan disimpan pada variabel $dataProduct
- Line 5 kita isi nilai kolom price dengan value ‘2050000‘, menggunakan variabel $dataProduct
- Line 6 kita menggunakan method save dengan menggunakan object $product, dan untuk parameter method save adalah array $dataProduct
berikutnya kita akan coba mengakses method saveupdate2 dengan menggunakan URL sebagai berikut :
localhost:8080/product/saveupdate2
Maka data dengan kd_product 1 akan berubah, nilai price akan menjadi 2050000
Perintah Delete
Berikutnya kita akan belajar mengenai method Delete, method ini digunakan untuk menghapus data di database, dalam contoh ini kita akan membuat method baru di controller Product, semisal method kita beri nama deletedata, isi method deletedata adalah sebagai berikut :
1 2 3 4 5 |
public function deletedata() { $product = new ProductModel(); $product->delete(1); } |
Keterangan :
Line 3 kita buat object dengan nama product dengan class ProductModel
Line 4 kita gunakan method delete dengan menggunakan object $product, dengan parameter 1, yang artinya menghapus data di tabel tb_product yang kd_product = 1, hal ini dikarenakan kita set variabel $primaryKey di model adalah kd_product
Coba kita mengakses method deletedata di controller Product, dengan menggunakan URL :
localhost:8080/product/deletedata
maka hasilnya datanya akan seperti berikut ini :
Keterangan :
Perhatikan pada data dengan kd_product 1, data tidak dihapus, tetepi bagian deleted_at akan berisi waktu data itu dihapus, hal ini dikarenakan kita menset $useSoftDeletes = true; dibagian model ProductModel
Beberapa perintah lain yang bisa anda gunakan untuk menghapus data antara lain :
Menghapus data dengan beberapa ID
Anda bisa menghapus beberapa data sekaligus, dengan menuliskan ID data sesuai primary key, kedalam bentuk array, contohnya adalah sebagai berikut :
1 2 |
$product = new ProductModel(); $product->delete([1,2,3]); |
Menghapus data dengan perintah where
Anda bisa menghapus data dengan menggunakan kombinasi pencarian data menggunakan method where, contoh perintahnya adalah sebagai berikut :
1 2 |
$product = new ProductModel(); $product->where('name', 'Redmi 9')->delete(); |
Menghapus Permanent Seluruh data dari fitur SoftDeletes
Seperti contoh diatas saat kita memberikan nilai TRUE dibagian SoftDeletes, ketika kita menghapus data, data itu tidak benar – benar terhapus tapi sebenernya hanya memberikan nilai pada bagian kolom deleted_at, dengan perintah dibawah ini anda bisa menghapus data tersebut secara permanent.
1 2 |
$product = new ProductModel(); $product->purgeDeleted(); |
dengan perintah diatas, maka data didalam tabel tb_product yang memiliki nilai di kolom deleted_at atau bisa dikatakan nilai pada value kolom deleted_at IS NOT NULL maka data itu akan dihapus.
Menghapus Data secara permanen
Seperti yang telah kita bahas diawal, codeigniter 4 memiliki fitur softdelete dibagian model, jika anda ingin menghapus data secara permanent bisa menambahkan value true, diparameter kedua pada method delete, jadi contoh perintahnya adalah seperti berikut ini :
1 2 |
$product = new ProductModel(); $product->delete(1, true); |
Keterangan :
perintah diatas digunakan untuk menghapus data secara permanen untuk data di tabel tb_product yang nilai kd_product = 1, kita hanya perlu menambahkan parameter kedua dengan nilai true.
Menampilkan Data
Berikutnya kita akan membahas bagaimana cara menampilkan data dengen menggunakan model, ada beberapa fitur yang disediakan oleh codeigniter 4, baik kita akan mulai bahas satu persatu :
Menggunakan method find
Method find ini digunakan untuk menampilkan data berdasarkan nilai yang ada dibagian kolom yang menjadi primary key.
Semisal kita ingin mencari data di tabel tb_product yang nilai kd_product adalah 2, contohnya kita akan menambahkan method baru dengan nama getdata di controller Product, jadi controller Product kurang lebih seperti berikut ini :
1 2 3 4 5 6 7 8 |
public function getdata() { $product = new ProductModel(); $dataProduct = $product->find(2); echo "<pre>"; echo print_r($dataProduct); echo "</pre>"; } |
Keterangan :
- Line 3 kita buat object dengan nama $product dengan class ProductModel
- Line 4 kita menggunakan method find() dengan nilai parameter adalah 2 yang artinya kita mencari data di tb_product dengan nilai di kolom kd_product sebagai primary key
- Line 5 – 7 kita tampilkan datanya, kita gunakan print_r agar anda dapat melihat isi return hasil query
Kita dapat mengaksesnya dengan menggunakan perintah :
localhost:8080/product/getdata
Menggunakan method find Column
Perintah ini digunakan untuk menampilkan data yang ada didalam kolom yang kita inginkan, semisal dalam contoh ini kita ingin menampilkan isi dari kolom name didalam tabel tb_product, kita akan modifikasi method getdata yang ada di dalam controller Product, sehingga method getdata akan menjadi seperti berikut ini :
1 2 3 4 5 6 7 8 |
public function getdata() { $product = new ProductModel(); $dataProduct = $product->findColumn('name'); echo "<pre>"; echo print_r($dataProduct); echo "</pre>"; } |
Keterangan :
- Line 3 kita buat object dengan nama $product dengan class ProductModel
- Line 4 kita menggunakan method findColumn() dengan nilai parameter adalah name yang artinya kita ingin menampilkan kolom dengan nama name di tabel tb_product
- Line 5 – 7 kita tampilkan datanya, kita gunakan print_r agar anda dapat melihat isi return hasil query
kita akan coba mengakses method getdata dengan URL :
localhost:8080/product/getdata
maka hasilnya adalah sebagai berikut :
Keterangan :
- yang tampil hanya satu data, padahal data ada 2, karena yang satunya dalam keadaan terhapus, jadi yang tampil hanya Xiaomi Mi Note 10 Pro yang merupakan nilai dari kolom name.
Menggunakan method findAll
Method ini digunakan untuk menampilkan seluruh data yang ada pada sebuah tabel kecuali data yang terhapus dengan fitur softdelete, anda bisa menggunakan perintah seperti berikut :
1 2 3 4 5 6 7 8 |
public function getdata() { $product = new ProductModel(); $dataProduct = $product->findAll(); echo "<pre>"; echo print_r($dataProduct); echo "</pre>"; } |
Keterangan :
- Line 4 kita menggunakan perintah findAll yang akan menampilkan seluruh data yang ada di tabel tb_product kecuali data yang dihapus.
Anda juga dapat dapat menuliskan perintah pencarian where dibagian ini, contoh perintahnya adalah sebagai berikut :
1 2 |
$product = new ProductModel(); $dataProduct = $product->where('name','Xiaomi Mi Note 10 Pro')->findAll(); |
Keterangan :
- Perintah diatas digunakan untuk menampilkan seluruh data di tabel tb_product yang kolom name bernilai ‘Xiaomi Mi Note 10 Pro‘
Anda juga bisa menggunakan perintah limit dan offset seperti pada perintah SQL biasanya, contoh penggunaannya adalah seperti berikut ini :
1 |
$users = $userModel->findAll($limit, $offset); |
Keterangan :
- kita bisa menuliskan parameter 1 untuk bagian limit, dan parameter 2 untuk bagian offset pada method findAll
Menggunakan method findAll dengan withDeleted
Berikutnya anda juga dapat mengakses data seluruh data dalam sebuah tabel tanpa terkecuali, sekalian dengan data yang sudah anda hapus dengan fitur softdelete, contoh penggunaannya adalah sebagai berikut ini :
1 2 |
$product = new ProductModel(); $dataProduct = $product->withDeleted()->findAll(); |
Keterangan :
- Anda cukup menambahkan method withDeleted dibagian findAll
Menggunakan method findAll dengan onlyDeleted
Anda juga dapat menampilkan data yang sudah dihapus melalui fitur softdelete, anda bisa menambahkan method onlyDeleted, sehingga penggunaannya adalah sebagai berikut :
1 2 |
$product = new ProductModel(); $dataProduct = $product->onlyDeleted()->findAll(); |
Keterangan :
- Anda cukup menambahkan method onlyDeleted dibagian findAll, maka data yang tampil hanya yang sudah dihapus melalui softdelete
Menggunakan Fitur First
Anda juga dapat menampilkan untuk satu data saja dengan menggunakan method first, semisal anda akan mencari beberapa data, tapi anda hanya ingin menampilkan data pertamanya saja, anda bisa menggunakan perintah first ini.
1 2 |
$product = new ProductModel(); $dataProduct = $product->where('price','10999000')->first(); |
Keterangan :
- dengan perintah diatas, anda akan menampilkan data di tabel tb_product, yang kolom price memiliki nilai 10999000, tetapi anda hanya akan mendapatkan data pertama saja, karena kita menggunakan method first.
Jadi kurang lebih seperti itu ya teman – teman pembahasan terkait dengan model di Codeigniter 4, kita sudah membahas dari mulai cara membuat model, mengakses method model, serta beberapa method yang dapat digunakan untuk mengakses data di database melalui model, sekian dulu sampai jumpa di tutorial selanjutnya.
Terimakasih penjelasannya, mudah dipahami. Request penjelasan dan contoh penggunaan entity untuk materi selanjutnya gan. Semangat!!!
Terima kasih sudah membaca tulisan saya kak, penggunaan entity seperti apa maksudnya nih kak ?
https://codeigniter4.github.io/userguide/models/entities.html yang ini gan.