【发布时间】:2014-09-12 11:24:16
【问题描述】:
我有一个简单的SQL 查询,我想通过Yii 1.15 ORM 运行。
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更像是一个记录过滤器。您在这里选择的实际上是什么?你到底想收到什么? -
question_answered来自第一个 SQL 查询。我知道它不可能得到 int,我会得到 CModel。但是为什么我不能用 CDbCriteria 来做这件事 -
因为你得到(并且想要?)一个整数,但
Model->find()将返回一个活动记录模型或 null。用 find() 来做这件事是没有意义的。这个整数是多少?一个模型的 ID 还是只是一个计数?如果它与模型(如 ID)无关,则通过 find() 获取它是没有意义的。 -
如果您阅读了这个问题,
last_question是我计算的基础。它是一个整数值。这就是我想用这个字段返回sum(last_question) - count(last_question)