php Codeigniter – ошибка при выполнении библиотеки Subquery.php

Я использую библиотеку для работы подзапросов – 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 ).