2013-09-17 4 views
1

Могу ли я использовать $this->db->join('database.table') без ввода второго параметра этой функции? Мне нужно подключить 2 базы данных, но они не имеют ничего, что связывает их. Я знаю, что он работает с SQL, потому что я пробовал, но я хочу, чтобы изменить модель с помощью активной записи, потому что я считаю его более гибким, и т.д .. но я не знаю, как вставить джойнактивная запись codeigniter join 2 базы данных

$this->db->select('users.user_id'); 
$this->db->distinct(); 
$this->db->from('users'); 
$this->db->join('user_detail', 'users.user_id = user_detail.id', 'left'); 

и теперь что-то вроде:

$this->db->join('cities.city'); 

Так SQL должен быть как:

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city 

Вместо:

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city ON 

Что у меня на самом деле.

Пожалуйста, помогите. Спасибо.

ответ

3

Вы не можете. Если вы посмотрите на основные файлы CI, вы увидите, что ON всегда будет передан. Я не понимал, что это так, пока я не проверил системные файлы.

$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).' ON '.$cond; 

Ссылка в /system/database/DB_active_rec.php линии 340. Даже в latest version (GitHub) это по-прежнему имеет место, хотя и будет использоваться либо ON или USING().

Лучше всего использовать $this->db->query():

$this->db->query('SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city'); 

Update: Поскольку вы используете 2.1.3, вы можете взломать файлы ядра (так как я не верю, что есть способ продлить Активные записи CI). Хотя вы не должны редактировать основные файлы на обычной основе, по крайней мере, это даст вам то, что вам нужно. Открыть /system/database/DB_active_rec.php:

Изменить линию 310 в:

public function join($table, $cond, $type = '', $use_on = TRUE) 

Изменение строки 340 (который теперь становится 2 строки):

$on_cond = ($use_on === TRUE) ? ' ON '.$cond : NULL; 
$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).$on_cond; 

Теперь в вашей модели, когда вы называете join() пройти 4-ый параметр, FALSE, для отключения ON:

$this->db->join('cities.city', NULL, '', FALSE); 
+0

Спасибо за ваш быстрый ответ, я попробовал, но проблема в том, что у меня есть несколько объединений (12), поэтому я хочу использовать активную запись. Могу ли я каким-то образом использовать активную запись сначала, а затем объединить ее с SQL и затем добавить к ней некоторые активные записи? – kalafun

+0

Какую версию CI вы используете? – doitlikejustin

+0

моя версия CI 2.1.3 – kalafun

Смежные вопросы