2012-07-30 27 views
1

我想獲得的Kohana的ORM來構建一個返回記錄的查詢,但也算另一個表相關的行。是我在一本手冊查詢這樣做,其結果必然是,像這樣:添加子查詢的Kohana 3 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模型的任何部分?

謝謝

+0

爲什麼你不想添加分開的計數查詢?緩存結果和下降緩存,當你有該用戶的新的答案。 – biakaveron 2012-08-05 10:29:14

回答

3

好的,我想通了。我通過創建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()可能造成這應該與用戶提交的數據使用的安全風險。但我不會用它從用戶任何東西,所以我確定現在。

如果有人有更好的解決方案,我會很樂意看到你將如何解決這個問題。

0

如果你先用查詢生成器執行子查詢,並將它推入你的函數 - > add_subquery(),你應該沒問題。