No hay soporte incorporado para JOIN ... USING
en la clase de registro activa. Su mejor apuesta probablemente cambiaría join()
función para ser así (el archivo es system/database/DB_active_rec.php
en caso de que no lo sepas)
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;
}
Entonces, simplemente puede usar esto en su código join('table', 'USING ("something")')
Aunque, es posible que desee ampliar la clase en lugar de modificarla para que no tenga que hacer lo mismo una y otra vez cuando actualice su CI. Eche un vistazo a esto artículo o este (o busca en google) si quieres hacerlo.
O si no quiere pasar por todos esos problemas, puede escribir una función de ayuda simple que pueda hacer lo mismo.
<?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;
}
Más tarde, simplemente cargue el asistente y llame a la función como esta join_using('table', 'key')
. Entonces producirá el mismo resultado que lo haría con el join()
original excepto que este te dará USING
en lugar de ON
condición.
Por ejemplo:
// $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);