0

サブクエリを機能させるためにライブラリを使用しています-Subquery.phpRef: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

うーん、わかりました。_compile_select27行目にサブクエリのソースコードが表示されているので、またはを呼び出したいと考えていますget_compiled_select。CIをチェックインできる場合DB_active_rec.php_compile_selectは保護されているため、サブクエリからアクセスできません(のサブクラスではありませんdb)。

考えられる解決策:_compile_select()パブリックまたはクラスSubqueryはCIのdbクラスの拡張である必要があります。これをサブクエリの作成者に報告する必要があると思います。

または、CIのdbクラスを拡張できます:)

申し訳ありませんが、コメントとして書きたいと思います。

于 2012-05-29T05:59:59.117 に答える
1

おかげで、私はstmtを変更しました。Subquery.phpで、正常に動作していますclass Subqueryclass Subquery extends CI_DB_active_recordそして、はい、私はこれを著者に報告します。:)

于 2012-05-29T06:20:41.100 に答える
0

そのライブラリを書いたので、使ってくれてありがとう。問題は(@uzsoltが述べているように)_compile_select保護されていることです。以前はCodeIgniter1.7.xにはありませんでした(一部の開発者が見つけた、きちんとした隠しメソッドでした)。

GitHubの開発バージョンのCodeIgniter(https://github.com/EllisLab/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 に答える