Não há suporte integrado para
JOIN ... USING
na classe de registro ativo. Sua melhor aposta provavelmente mudaria o join()
função seja assim (o arquivo é system/database/DB_active_rec.php
caso não saiba) 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;
}
Então, você pode simplesmente usar isso em seu código
join('table', 'USING ("something")')
No entanto, talvez você queira estender a classe em vez de modificá-la para não precisar fazer a mesma coisa repetidamente ao atualizar seu CI. Dê uma olhada em artigo ou este (ou pesquise no google) se você quiser fazer isso.
Ou se você não quiser ter todos esses problemas, você pode escrever uma função auxiliar simples que pode fazer a mesma coisa.
<?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;
}
Mais tarde, basta carregar o auxiliar e chamar a função assim
join_using('table', 'key')
. Ele produzirá o mesmo resultado que você faria com o join()
original exceto que este lhe dará USING
em vez de ON
doença. Por exemplo:
// $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);