Il n'y a pas de support intégré pour JOIN ... USING
dans la classe d'enregistrement active. Votre meilleur pari serait probablement de changer le join()
fonction pour être comme ça (le fichier est system/database/DB_active_rec.php
au cas où vous ne le sauriez pas)
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;
}
Alors, vous pouvez simplement l'utiliser dans votre code join('table', 'USING ("something")')
Cependant, vous voudrez peut-être étendre la classe au lieu de la modifier afin de ne pas avoir à refaire la même chose encore et encore lorsque vous mettez à niveau votre CI.Jetez un œil à ceci article ou celui-ci (ou recherchez sur Google) si vous préférez le faire à la place.
Ou si vous ne voulez pas vous compliquer la vie, vous pouvez écrire une simple fonction d'assistance qui peut faire la même chose.
<?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;
}
Plus tard, chargez simplement l'assistant et appelez la fonction comme ceci join_using('table', 'key')
. Il produira alors le même résultat que vous le feriez avec le join()
d'origine sauf que celui-ci vous donnera USING
au lieu de ON
état.
Par exemple :
// $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);