Tidak ada dukungan bawaan untuk JOIN ... USING
di kelas rekaman aktif. Taruhan terbaik Anda mungkin akan mengubah join()
fungsinya menjadi seperti ini (filenya adalah system/database/DB_active_rec.php
jika Anda tidak tahu)
public function join($table, $cond, $type = '')
{
if ($type != '')
{
$type = strtoupper(trim($type));
if ( ! in_array($type, array('LEFT', 'RIGHT', 'OUTER', 'INNER', 'LEFT OUTER', 'RIGHT OUTER')))
{
$type = '';
}
else
{
$type .= ' ';
}
}
// Extract any aliases that might exist. We use this information
// in the _protect_identifiers to know whether to add a table prefix
$this->_track_aliases($table);
// Strip apart the condition and protect the identifiers
if (preg_match('/([\w\.]+)([\W\s]+)(.+)/', $cond, $match))
{
$match[1] = $this->_protect_identifiers($match[1]);
$match[3] = $this->_protect_identifiers($match[3]);
$cond = $match[1].$match[2].$match[3];
}
// Assemble the JOIN statement
$type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE);
$using_match = preg_match('/using[ (]/i', $cond);
if ($using_match)
{
$join .= $cond;
}
else
{
$join .= ' ON '.$cond;
}
$this->ar_join[] = $join;
if ($this->ar_caching === TRUE)
{
$this->ar_cache_join[] = $join;
$this->ar_cache_exists[] = 'join';
}
return $this;
}
Jadi, Anda cukup menggunakan ini dalam kode Anda join('table', 'USING ("something")')
Meskipun demikian, Anda mungkin ingin memperluas kelas daripada memodifikasinya sehingga Anda tidak perlu melakukan hal yang sama berulang-ulang saat Anda meningkatkan CI Anda. Lihat artikel atau yang ini (atau cari di google) jika Anda ingin melakukannya.
Atau jika Anda tidak ingin mengalami semua masalah itu, Anda dapat menulis fungsi pembantu sederhana yang dapat melakukan hal yang sama.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function join_using($table, $key)
{
$CI = get_instance();
$join = 'JOIN '. $table .' USING (`'. $key .'`)';
return $CI->db->ar_join[] = $join;
}
Nanti, muat saja helper dan panggil fungsi seperti ini join_using('table', 'key')
. Kemudian akan menghasilkan hasil yang sama seperti yang Anda lakukan dengan join()
original yang asli kecuali yang ini akan memberi Anda USING
bukannya ON
kondisi.
Misalnya:
// $something1 and $something2 will produce the same result.
$something1 = $this->db->join('join_table', 'join_table.id = table.id')->get('table')->result();
print_r($something1);
join_using('join_table', 'id');
$something2 = $this->db->get('table')->result();
print_r($something2);