Так же в табличку сессий добавил поле UserID, в которое сохраняю ID текущего пользователя.
Сделал свой класс наследник от CDbHttpSession.
Так же отнаследовался от CWebUser и сделал там метод:
class WebUser extends CWebUser
{
static $_model;
public function getModel()
{
if(self::$_model == null) self::$_model = User::model()->findByPk($this->id);
return self::$_model;
}
}
А теперь подумал, ведь можно вместо двух запросов к БД (чтение сессии и WebUser::GetModel) сделать один. И читать данные юзера прямо при чтении сессии:
SELECT FROM sessions
LEFT JOIN users ON users.UserID=session.UserID
Все бы хорошо, но чтение сессии вызывается из CWebUser::init, и я не могу в методе readSession достучаться до Yii::app()->user, ибо он еще тогда NULL.
Отсюда вопрос, как наиболее кошерно сделать заполнение модели $_model в WebUser при чтении сессии?
Вообще ИМХО это экономия на спичках, к тому же в ущерб архитектуре приложения. Ведь у пользователя ещё может быть и профиль. Его мы тоже можем захотеть выдернуть вместе со всем в один запрос. А в другом приложении у нас профиля может и не быть. Я лично за универсальные компоненты. Но вашу задачу можно помочь решить чисто из спортивного интереса. Но для начала объясните зачем вам в методе readSession() стучаться до Yii::app()->user. Дайте больше деталей.