0

有没有办法动态修改 Yii 的关系模型中给出的标准?

例如,我在一个游戏模型中有这种关系,它会给我所有的积分

'total_points' => [self::STAT, 'Point', 'game_id', 'select' => 'SUM(earned)']

这工作得很好。但是,我希望能够根据动态选择的特定用户 ID 来减少它。

我将如何创建一个类似以下的方法,该方法将为特定的、不断变化的用户返回在此游戏中获得的 total_points,其中 user_id 是 Point 模型的属性?

function getUserPoints($user_id) {
    return $this->someCriteriaChangingMethod('user_id = $user_id')->total_points;
}
4

3 回答 3

4

通过yii 指南,这应该可以工作:

$model->total_points(array(
    'condition' => "user_id = :uId",
    'params' => array(':uId' => $user_id),
));

这是你想要的吗?

于 2012-05-16T23:13:59.473 回答
0

我不认为你能做到这一点。这是另一种方法

function getUserPoints($user_id) {

     $row=Yii::app()->db->createCommand()->select("SUM(earned) as total_points")
                    ->from("point")
                    ->where('user_id = :user_id',array(":user_id"=>$user_id))
                    ->queryRow();
    return $row["total_points"];

}
于 2012-05-16T18:07:26.710 回答
0

要动态修改关系,您可以使用方法CActiveRecord->getRelated(),它允许我这样做

function getUserPoints($user_id) {
    $t = $this->getRelated('total_points', false, [
        'condition' => 'user_id = :user_id',
        'params' => [':user_id' => $user_id],
    ]);

    return $t;
}
于 2012-05-16T18:27:39.123 回答