动态改变关系标准

时间:2012-05-16 17:43:46

标签: orm yii

有没有办法动态修改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;
}

3 个答案:

答案 0 :(得分:4)

yii guide这应该有效:

$model->total_points(array(
    'condition' => "user_id = :uId",
    'params' => array(':uId' => $user_id),
));
这是你想要的吗?

答案 1 :(得分: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"];

}

答案 2 :(得分: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;
}