Я использую библиотеку для работы подзапросов – Subquery.php Ref: https://github.com/NTICompass/CodeIgniter-Subqueries
$this->db->select('test'); $this->db->select('test2'); $this->db->from('table'); $sub = $this->subquery->start_subquery('where_in'); $sub->select('IDs'); $sub->from('idTable'); $sub->where('date', '2011-07-10'); $this->subquery->end_subquery('id');
Я думаю, что это заявление:
$sub = $this->subquery->start_subquery('where_in');
содержит ошибку. Когда я выполняю эту строку, я получаю пустую страницу. Fn. start_subquery:
function start_subquery($statement, $join_type = '', $join_on = 1){ $db = $this->CI->load->database('', true); // after executing this statement, a blank page shows... $this->dbStack[] = $db; $this->statement[] = $statement; if(strtolower($statement) == 'join'){ $this->join_type[] = $join_type; $this->join_on[] = $join_on; } return $db; }
FYI – в моей базе данных.php:
$active_group = 'default' $active_record = TRUE;
И версия CI – 2.1.0
Хм, пойми. Поскольку я вижу исходный код подзапроса в строке 27, он хочет вызвать _compile_select
или get_compiled_select
. Если вы можете проверить в DB_active_rec.php
CI, то _compile_select
защищен, поэтому вы не можете получить доступ из подзапроса (это не подкласс db
).
Возможное решение: _compile_select()
должно быть общедоступным или класс Subquery
должен быть расширением класса db класса CI. Я думаю, вы должны сообщить об этом автору подзапроса.
Или вы можете расширить класс db CI 🙂
Извините – я хочу написать это как комментарий.
Спасибо, я изменил stmt. class Subquery
в class Subquery extends CI_DB_active_record
в class Subquery extends CI_DB_active_record
и работает нормально. И да, я сообщу об этом автору. 🙂
Я написал эту библиотеку, поэтому спасибо за ее использование. Проблема заключается в том, что _compile_select
защищен. Раньше он не был в CodeIgniter 1.7.x (это был просто аккуратный скрытый метод, найденный некоторыми разработчиками).
В dev-версии CodeIgniter на GitHub ( https://github.com/EllisLab/CodeIgniter ) существует общедоступный метод get_compiled_select
. Кажется, это изменение еще не было перенесено на стабильную сборку.
Итак, чтобы эта библиотека работала, вы можете попробовать использовать версию CodeIgniter. Я уверен, что они собираются удалить возможность extend CI_DB_active_record
в будущем ( http://codeigniter.com/user_guide/general/creating_libraries.html ).