我一直在使用子库来运行子查询 - 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
答案 0 :(得分:1)
_compile_select
或get_compiled_select
。如果您可以签入CI DB_active_rec.php
,则_compile_select
受到保护,因此您无法从子查询访问(它不是db
的子类)。
可能的解决方案:_compile_select()
应公共或类Subquery
应扩展CI的db类。我想你应该向Subquery的作者报告。
或者您可以扩展CI的db类:)
抱歉 - 我想把它写成评论。
答案 1 :(得分:1)
谢谢,我已经更改了stmt。 Subquery.php中的class Subquery
到class Subquery extends CI_DB_active_record
,它运行正常。是的,我会向作者报告。 :)
答案 2 :(得分:0)
我写了那个库,所以感谢你使用它。问题是(@uzsolt has stated)_compile_select
受到保护。它曾经不在CodeIgniter 1.7.x中(它只是一些开发人员发现的一个简洁的隐藏方法)。
在GitHub上的CodeIgniter的开发版本(https://github.com/EllisLab/CodeIgniter)中,有一个公共get_compiled_select
方法。似乎这种变化还没有被推到稳定版本中。
因此,要使此库工作,您可以尝试使用CodeIgniter的开发版本。我很确定他们将来会删除extend CI_DB_active_record
的{{1}}能力。{/ p>