0

我一直在使用子查询库 - Subquery.php 参考: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;
    }

仅供参考 - 在我的 database.php 中:

$active_group = 'default'
$active_record = TRUE;

CI版本是2.1.0

4

3 回答 3

1

嗯,明白了。当我在第 27 行看到子查询的源代码时,它想要调用_compile_selector get_compiled_select。如果您可以签入 CI DB_active_rec.php_compile_select则受保护,因此您无法从 Subquery 访问(它不是 的子类db)。

可能的解决方案:_compile_select()public 或 classSubquery应该是 CI 的 db 类的扩展。我认为您应该将此报告给子查询的作者。

或者您可以扩展 CI 的 db 类:)

对不起 - 我想把它写成评论。

于 2012-05-29T05:59:59.117 回答
1

谢谢,我已经改变了stmt。class Subqueryclass Subquery extends CI_DB_active_recordSubquery.php 中,它工作正常。是的,我会向作者报告。:)

于 2012-05-29T06:20:41.100 回答
0

我写了那个库,所以感谢您使用它。问题是(正如@uzsolt 所说_compile_select是受保护的。它曾经不在 CodeIgniter 1.7.x 中(它只是一些开发人员发现的一种巧妙的隐藏方法)。

在 GitHub ( https://github.com/EllisLab/CodeIgniter ) 上的 CodeIgniter 开发版中,有一个公共get_compiled_select方法。似乎此更改尚未推送到稳定版本。

因此,要让这个库正常工作,您可以尝试使用 CodeIgniter 的开发版本。我很确定他们extend CI_DB_active_record将来会删除该功能(http://codeigniter.com/user_guide/general/creating_libraries.html)。

于 2012-07-09T17:22:59.393 回答