Site icon SUSANTOKUN

Cara Join Table di CodeIgniter

Cara Join Table di CodeIgniter

Pada 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) :

  1. id [primary key, int (3), ai]
  2. id_role [int(3)]
  3. username [varchar(30)]
  4. password [varchar(30)]
  5. email [varchar(30)]

Tabel 2 (tbl_role) :

  1. id [primary key, int(11), ai]
  2. name [varchar(30)]
  3. 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

application/models/User_model.php

application/views/welcome_message.php

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

Exit mobile version