好的,我想通了。我通过创建扩展了 ORM 驱动程序classes/orm.php
,其中包含以下内容:
<?php defined('SYSPATH') or die('No direct access allowed.');
class ORM extends Kohana_ORM {
public function add_subquery($query) {
$this->_db_pending[] = array(
'name' => 'select',
'args' => array(DB::expr($query)),
);
return $this;
}
}
然后,在我的 ORM 调用中,我执行了以下操作:
$questions = ORM::factory('question')
->add_subquery('(SELECT COUNT(answer_id) FROM user_question_answers WHERE answer_question_id = question_id) as answer_count')
->where('question_user_id', '=', $this->current_user->id)
->find_all();
我仍在弄清楚 Kohana 的所有细节,我担心如果DB::expr()
将其与用户提交的数据一起使用,可能会带来安全风险。但我不会将它与用户的任何东西一起使用,所以我现在还可以。
如果有人有更好的解决方案,我很想看看您将如何解决问题。