Возник вопрос по моделям ActiveRecord.
Есть модель User, которая наследуется от CActiveRecord и представляет собой строку пользователя из БД. Я хотел бы добавить свой метод в модель getLastSession(), внутри этого метода создается объект модели Session и выбирается последняя сессия данного пользователя.
Проблема в том, что когда я к модели User применяю метод findBySql(), то объект который вернулся не содержит моего метода getLastSession() и я не могу получить последнюю сессию пользователя из таблицы базы данных где хранятся все сессии данного пользователя. Это я так понимаю связано с тем что возвращается экземпляр класса CActiveRecord, каким образом можно вернуть после поиска экземпляр User, чтобы там был мой метод getLastSession() и я его мог применить к объекту что вернулся после поиска. Также там может быть еще несколько методов, например getTotalUserComments() и т.д.
Выборка пользователя осуществляется таким образом:
Код: Выделить всё
$user = User::model() -> findBySql('SELECT * FROM users WHERE user_id = ' . $userId . ' LIMIT 1');
Заранее благодарю.
Модель User
Код: Выделить всё
class User extends CActiveRecord {
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'users';
}
public function relations()
{
return array(
'profile' => array(self::HAS_ONE, 'UserProfile', 'user_id'),
);
}
public function getLastSession() {
/** @var Session $session */
$session = Session::model() -> findBySql('SELECT * FROM session WHERE user_id = ' . $this -> user_id . ' ORDER BY session_id DESC LIMIT 1');
if (is_object($session)) {
return $session;
} else {
return false;
}
}
}