Няма вградена поддръжка за JOIN ... USING
в активния клас запис. Най-добрият ви залог вероятно ще промени join()
функция да бъде такава (файлът е system/database/DB_active_rec.php
в случай, че не знаете)
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;
}
Така че можете просто да използвате това във вашия код join('table', 'USING ("something")')
Въпреки това, може да искате да разширите класа, вместо да го модифицирате, така че да не се налага да правите едно и също нещо отново и отново, когато надграждате своя CI. Разгледайте този статия или този (или потърсете в Google), ако искате да го направите вместо това.
Или ако не искате да се справяте с всички тези проблеми, можете да напишете проста помощна функция, която може да направи същото.
<?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;
}
По-късно просто заредете помощника и извикайте функцията по този начин join_using('table', 'key')
. След това ще даде същия резултат, както бихте направили с оригиналния join()
освен че този ще ви даде USING
вместо ON
състояние.
Например:
// $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);