2012-05-16 2 views
0

Есть ли способ динамически изменять критерии, приведенные в модели отношений Yii?Динамически изменяющиеся критерии отношений

К примеру, у меня есть отношения в модели игры, которая даст мне все заработанные очки за это

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

Это работает просто отлично. Тем не менее, я хочу, чтобы иметь возможность исправлять это на основе определенного идентификатора пользователя, выбранного динамически.

Как создать метод, подобный следующему, который вернет total_points, заработанные в этой игре для определенного, меняющегося пользователя, где user_id является атрибутом модели Point?

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

ответ

4

По yii guide это должно работать:

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

Это то, что вы хотите?

+0

Perfect. Клянусь, я уже пробовал это, но, думаю, нет. Может быть, я схожу с ума. –

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"]; 

} 
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; 
} 
Смежные вопросы