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