Рейтинг С Помощью Виджета(Cstarrating)

Здравствуйте. Делал рейтинг по примеру с сайта: Пример рейтинга

Вроде все получилось, но не могу разобраться что происходит в этих строчках кода:


if ($rating->save())//если рейтинг сохранился в таблицу, то... 

{

 $good = $rating->product_id;

 $good->rating = round($good->rating + ($rate * 100 - $good->rating) / ($good->marksCount + 1));

 $good->save();

 echo 'success';

}

для чего мы сохраняем в


$good = $rating->product_id

откуда в переменной берется свойство


$good->rating

куда мы сохраняем, ведь нет такой модели


$good->save();




$rating = Rating::model()->with(array('article', 'article.marksCount'))

                ->findByAttributes(array(

                                        'article_id' => $article_id,

                                        'user_id' => $user,

                                   ));



Собственно там выборка идет с relations, значит по fk привязаны другие модели




$rating = new Rating;

            $rating->article_id = $article_id;

            $rating->user_id = $user;

            $rating->value = $rate;

            if ($rating->save()) {//сохраняем rating

                $good = $rating->article; // $good у нас модель Article

                $good->rating = round($good->rating + ($rate * 100 - $good->rating) / ($good->marksCount + 1));

                $good->save();

                echo 'success';

            }



Уж очень хитро там, посмотрите как сделано в cookbook, как по мне намного проще.