1

我试图让 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 模型的任何部分?

谢谢

4

2 回答 2

3

好的,我想通了。我通过创建扩展了 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()将其与用户提交的数据一起使用,可能会带来安全风险。但我不会将它与用户的任何东西一起使用,所以我现在还可以。

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

于 2012-07-30T02:13:50.380 回答
0

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

于 2013-02-22T08:56:32.787 回答