将子查询添加到 Kohana 3 ORM


Add subquery to Kohana 3 ORM

>我正在尝试让Kohana的ORM构造一个返回记录的查询,但也计算另一个表中的相关行。如果我在手动查询中执行此操作,结果将是这样的:

SELECT
*,
(SELECT COUNT(answer_id) FROM user_question_answers WHERE answer_question_id = question_id) as answer_count
FROM users_questions
WHERE question_user_id = 13

是否可以将原始SQL添加到Kohana ORM模型的任何部分?

谢谢

好的,我想通了。我通过创建 classes/orm.php 来扩展 ORM 驱动程序,其中包含以下内容:

<?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() 可能会带来安全风险。但是我不会将它与用户的任何东西一起使用,所以我现在还可以。

如果有人有更好的解决方案,我很想看看您将如何解决问题。

如果您先使用查询生成器执行子查询并将其推送到函数 ->add_subquery(( 中,您应该没问题。