Cara Join Table di CodeIgniter
Diperbaharui 3 Agustus 2020 8:30 PMPada tutorial kali kita akan belajar bagaimana cara join multi table di codeigniter, join untuk 1 tabel, join 2 table, join 3 table hinggal join n table. Sebenarnya ini adalah permintaan dari Naufal Firansyah salah satu teman saja yang sedang kesulitan untuk join joinan.
Fungsi dari join table di codeigniter adalah untuk memanggil data lain yang ada pada tabel sehingga data dari tabel lain dapat ditampilkan sesuai dengan hubungan antara PK (Primary Key) dengan FK (Foreign Key). Sebagai contoh saya mempunyai 2 tabel dengan isi sebagai berikut :
Tabel 1 (tbl_user) :
- id [primary key, int (3), ai]
- id_role [int(3)]
- username [varchar(30)]
- password [varchar(30)]
- email [varchar(30)]
Tabel 2 (tbl_role) :
- id [primary key, int(11), ai]
- name [varchar(30)]
- description [varchar(50)]
Kemudian ingin menampilkan data dengan daftar username (tbl_user), email (tbl_user) dan name (tbl_role). Bagaimana caranya agar name yang ada di tbl_role dapat ditampilkan sesuai dengan id_role yang ada di tbl_user? Hmmmm gimana ya? Aku siapa? Aku dimana? Yaaaa … solusinya bisa menggunakan cara join table di codeigniter berikut.
1. Download project awal codeigniter → ganti nama menjadi ci-join-table → buka di text editor
2. Konfigurasi awal codeigniter sehingga siap untuk digunakan
3. Buat database dengan nama susantokun_ci_join_table dan masukkan code sql berikut :
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tbl_role` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`description` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `tbl_role` VALUES (1,'administrator','Bagian pengelola website'),(2,'member','Pengguna yang menggunakan website');
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `tbl_user` (
`id` int NOT NULL AUTO_INCREMENT,
`id_role` int NOT NULL,
`username` varchar(30) NOT NULL,
`password` varchar(30) NOT NULL,
`email` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `tbl_user` VALUES (1,1,'admin','password','admin@mail.com'),(2,2,'member','password','member@mail.com');
Source Code
Penjelasan
application/controllers/Welcome.php
- Pada function_index() kita membuat dataUser sebagai tempat penyimpanan data dari function get_by_role pada User_model
- Kemudian di load dataUser tersebut dengan menambahkan $data pada $this->load->view(‘welcome_message’, $data); sehingga dataUser hanya dapat tampil pada view welcome_message
application/models/User_model.php
- Pada function get_by_role() terdapat sql untuk menampilkan data dari tbl_user dengan kondisi select data dari tbl_role dan menampilkan field tbl_role.name sehingga nanti name yang terdapat pada tbl_role bisa dipanggil
- Pada $this->db->join(‘tbl_role’, ‘tbl_user.id_role = tbl_role.id’); adalah proses join antar table sehingga tbl_role name dapat dipanggil sesuai dengan id_role yang ada di tbl_user sama dengan id yang ada di tbl_role
application/views/welcome_message.php
- Menampilkan sebuah tabel dimana isi nya terdiri dari No, Username, Email dan Role Name dengan isi yang diambil dari 2 tabel, disitu pun sudah saya buatkan cara membuat nomor urut otomatis sehingga nomor urut akan tampil sesuai dengan jumlah row nya.
- Perhatikan bagian $dataUser as $row, itu adalah proses pengambilan data berdasarkan variabel $dataUser yang berdada di application/controllers/Welcome.php dimana $dataUser adalah data yang diambil dari application/models/User_model.php function get_by_role() yang disana ada join joinan.
Sekarang coba buka http://ci-join-table.test/ dan apakah hasilnya sama dengan gambar berikut :

Jika sama maka kamu telah berhasil join table di codeigniter, bagaimana jika ingin menambahkan field description dari tbl_role? Caranya cukup tambahkan <th>Description</th> pada thead dan <td><?=$row->description?></td> pada tbody. Sekarang coba cek kembali maka hasilnya akan nampak seperti berikut :
A PHP Error was encountered
Severity: Notice
Message: Undefined property: stdClass::$description
Filename: views/welcome_message.php
Line Number: 54
Backtrace:
File: /mnt/DATA/Code/codeigniter/ci-join-table/application/views/welcome_message.php
Line: 54
Function: _error_handler
File: /mnt/DATA/Code/codeigniter/ci-join-table/application/controllers/Welcome.php
Line: 15
Function: view
File: /mnt/DATA/Code/codeigniter/ci-join-table/index.php
Line: 315
Function: require_once
File: /home/susantokun/.config/composer/vendor/cpriego/valet-linux/server.php
Line: 232
Function: require
Kenapa demikian? Karena kita belum mendefinisikan field description pada tbl_role untuk ditampilkan, solusinya buka application/models/User_model.php dan pada function get_by_role() tambahkan “tbl_role.description” seperti pada code berikut :
public function get_by_role()
{
$this->db->select('
tbl_user.*, tbl_role.id AS id_role, tbl_role.name, tbl_role.description
');
$this->db->join('tbl_role', 'tbl_user.id_role = tbl_role.id');
$this->db->from('tbl_user');
$query = $this->db->get();
return $query->result();
}
Silakan buka kembali http://ci-join-table.test/ maka hasilnya tidak ada error dan description berhasil ditampilkan.

Bagaimana jika ingin join 3 tabel? Kamu cukup tambahkan tbl_user.*, tbl_role.id AS id_role, tbl_role.name dan $this->db->join(‘tbl_role’, ‘tbl_user.id_role = tbl_role.id’); seperti pada coding berikut :
public function get_by_role()
{
$this->db->select('
tbl_user.*, tbl_role.id AS id_role, tbl_role.name, tbl_role.description
tbl_1.*, tbl_2.id AS id_2, tbl_2.field1
');
$this->db->join('tbl_role', 'tbl_user.id_role = tbl_role.id');
$this->db->join('tbl_2', 'tbl_1.id_2 = tbl_2.id');
$this->db->from('tbl_user');
$query = $this->db->get();
return $query->result();
}
Bagaimana jika ingin join 4 table? Ya tinggal tambahkan lagi saja baris baru untuk join seperti code di atas. Itulah cara join multi table di codeigniter yang dapat saya sampaikan, semoga bermanfaat.
Baca Juga : Cara Membuat Multi Login di CodeIgniter