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")')
में इस्तेमाल कर सकते हैं
हालांकि, हो सकता है कि आप कक्षा को संशोधित करने के बजाय उसका विस्तार करना चाहें ताकि जब आप अपने सीआई को अपग्रेड करते हैं तो आपको एक ही काम को बार-बार करने की आवश्यकता नहीं होगी। इस पर एक नज़र डालें लेख या यह वाला (या गूगल सर्च करें) अगर आप इसके बजाय ऐसा करना चाहते हैं।
या अगर आप उन सभी परेशानियों को दूर नहीं करना चाहते हैं, तो आप एक साधारण हेल्पर फंक्शन लिख सकते हैं जो वही काम कर सकता है।
<?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);