Metode Join

Metode join digunakan untuk menggabungkan hasil query dari dua tabel atau lebih dengan syarat hanya memiliki 1 kunci yang akan di joinkan. Metode ini akan mengeksekusi perintah SQL JOIN dan juga bagian dari Query Builder.

Bentuk Umum

Berikut ini adalah bentuk umum metode join dari properti $db di kelas SENE_Model .

$this->db->join(
  string $table2,
  string $table2_alias,
  string $table2_column_to_joined,
  string $table1_alias,
  string $table1_column_to_joined
  [, string $join_method = ""]
): $this->db

Parameter

Metode join terdiri dari 5 parameter wajib dan 1 parameter opsional.

$table2

Dapat berisi string nama tabel yang akan dijoinkan.

$table2_alias

Dapat berisi string berisi nama alias tabel dari $table2.

$table2_column_to_joined

Dapat berisi string nama kolom patokan dari $table2 untuk dijoinkan.

$table1_alias

Dapat berisi string nama alias dari tabel patokan.

$table1_column_to_joined

Dapat berisi string nama kolom patokan dari tabel $table1_alias.

$join_method

Cara yang digunakan untuk menjoinkan tabel, nilai defaultnya adalah string kosong "". Berikut ini adalah beberapa nilai yang cocok untuk isi dari parameter join_method:

  • left untuk left join
  • right untuk right join
  • inner untuk inner join
  • outer untuk outer join

Contoh penggunaan

Berikut ini adalah contoh penggunaan metode join pada file d_order_model.php.

<?php
class D_Order_Model extends SENE_Model{
  var $tbl = 'd_order';
  var $tbl_as = 'dor';
  var $tbl2 = 'd_order_detail';
  var $tbl2_as = 'dod';
  var $tbl3 = 'c_produk';
  var $tbl3_as = 'cp';

  public function __construct(){
    parent::__construct();
    $this->db->from($this->tbl,$this->tbl_as);
  }
  public function getByOrderId($d_order_id){
    $this->db->from($this->tbl,$this->tbl_as);
    $this->db->join($this->tbl2, $this->tbl2_as, 'id', $this->tbl_as, 'd_order_id', 'left');
    $this->db->where_as("$this->tbl_as.d_order_id", $this->db->esc($d_order_id));
    return $this->db->get();
  }
  public function getDetailJasaForDrDashboard(){
    $this->db->from($this->tbl, $this->tbl_as);
    $this->db->join($this->tbl2, $this->tbl2_as, 'id', $this->tbl_as, 'd_order_id', '');
    $this->db->join($this->tbl3, $this->tbl3_as, 'id', $this->tbl_as, 'c_produk_id', 'left');
    $this->db->where_as("$this->tbl2_as.utype",$this->db->esc('order_selesai'));
    $this->db->where_as("$this->tbl3_as.jenis_paket", 'IS NULL');
    $this->db->where_as("$this->tbl_as.sdate", 'IS NOT NULL');
    return $this->db->get('',0);
  }
}

Hasil Perintah SQL

Berikut ini adalah perintah SQL yang dihasilkan oleh metode yang ada pada contoh kelas D_Order_Model.

-- result from executing D_Order_Model::getByOrderId(59) --
SELECT *
FROM `d_order` dor
LEFT JOIN d_order_detail dod
  ON dor.id = dod.d_order_id
WHERE dod.`id` = 59;

-- result from executing D_Order_Model::getDetailJasaForDrDashboard() --
SELECT *
FROM `d_order` dor
JOIN d_order_detail dod
  ON dor.id = dod.d_order_id
LEFT JOIN c_produk cp
  ON cp.id = dod.c_produk_id
WHERE
  dod.`utype` = "order_selesai"
  AND cp.utype IS NULL
  AND dor.sdate IS NOT NULL;