我有一個簡單的SQL
查詢,我想通過Yii 1.15 ORM運行。通過使用YII CDbCriteria或find()方法執行此SQL的更好方法?
SQL語法
SELECT (sum(last_question) - count(last_question)) as data
FROM tbl_game
WHERE last_question <> 0
我的問題是
什麼是更好的Yii辦法做到這一點?
如果使用Yii,還有可能得到整數值的返回而不是CModel Object?
更新1:
我已經嘗試過這樣的事情。它永遠不會返回question_answered
。我不知道它爲什麼這樣做。如果CDbCriteria
有這樣的選項select
那麼它應該工作。
$criteria = new CDbCriteria;
$criteria->select = '(sum(`last_question`) - count(`last_question`)) as "question_answered" ';
$criteria->condition = "last_question <> 0";
return game::model()->find($criteria);
更新2:
這是返回模型的上述標準的原始輸出。這裏沒有question_answered
。
我確信表中有記錄。
而且我已經更換了「與」的建議,它仍然不放棄question_answered
object(game)[103]
public 'points' => null
private '_new' (CActiveRecord) => boolean false
private '_attributes' (CActiveRecord) =>
array (size=0)
empty
private '_related' (CActiveRecord) =>
array (size=0)
empty
private '_c' (CActiveRecord) => null
private '_pk' (CActiveRecord) => null
private '_alias' (CActiveRecord) => string 't' (length=1)
private '_errors' (CModel) =>
array (size=0)
empty
private '_validators' (CModel) => null
private '_scenario' (CModel) => string 'update' (length=6)
private '_e' (CComponent) => null
private '_m' (CComponent) => null
它永遠不會給你一些'question_answered'。你正在做一個'Model-> find()',它總是返回一個活動記錄或null。由於Yii不知道如何將結果映射到模型,因此無法將複雜選擇填充到此模型中並返回模型。 'Find'更像是一個記錄過濾器。你在這裏選擇的是什麼?你想要接收什麼? – 2014-09-12 13:48:31
'question_answered'來自第一個SQL查詢。我知道它不可能得到int,我會得到CModel。但是爲什麼我不能用CDbCriteria執行這個事情 – Sushant 2014-09-12 13:55:21
因爲你得到(並且想要?)一個整數,但是'Model-> find()'將返回一個活動的記錄模型或null。用find()來做這件事是沒有意義的。什麼是這個整數?模型的ID還是隻是一些東西的計數?如果它不涉及模型(如ID),那麼通過find()獲取它就沒有意義。 – 2014-09-12 14:01:36