Я привык это делать так:
Код: Выделить всё
$User = UserFactory::createById(12345);
$User->getShardId();
Код: Выделить всё
$User = UserFactory::createById(12345);
$User->getShardId();
Код: Выделить всё
$user = User::model()->findByPk($id);
нет нет, это не просто данные из БД, а класс с набором методов работающих с Юзером.R3D3 писал(а):Если вы хотите достать пользователя из бд, например из таблицы `user`, и ей соответствует модель User, тоКод: Выделить всё
$user = User::model()->findByPk($id);
Ну опять же, пользователь это не абстрактная штука, а как минимум запись в таблице БД. Так что все эти методы лучше расположить в классе User (или в классе Profile, если для профиля отдельная таблица).AvtoNom писал(а): нет нет, это не просто данные из БД, а класс с набором методов работающих с Юзером.
Есть модель User, но я бы идеологически это модель Profile т.к. идет обработка записей профиля в БД
Конкретно сейчас пытаюсь понять куда засунуть метод определения Шарда по id юзера:R3D3 писал(а): Приведите несколько примеров таких методов, тогда станет понятнее где их лучше размещать.
Код: Выделить всё
public function getShardId(){
return floor($this->getId()/$this->countUserInShard)+1;
}
Код: Выделить всё
class UserObject extends CApplicationComponent implements IWebUser
Код: Выделить всё
public function getId()
{
return $this->getState('__id');
}
public function getState($key,$defaultValue=null)
{
$key=$this->getStateKeyPrefix().$key;
return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
}
Что-то не то имхо, обычно нет необходимости создавать дополнительный объект, реализующий IWebUserAvtoNom писал(а):На данный момент попытался создать компонент UserObjectно оказалось не решением т.к. getId использует $_SESSIONКод: Выделить всё
class UserObject extends CApplicationComponent implements IWebUser
Код: Выделить всё
public function getId() { return $this->getState('__id'); } public function getState($key,$defaultValue=null) { $key=$this->getStateKeyPrefix().$key; return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue; }
По-моему тут ответ однозначный: поскольку в вычислении участвует id пользователя, то этот метод должен располагаться в модели User.Конкретно сейчас пытаюсь понять куда засунуть метод определения Шарда по id юзера:
Код: Выделить всё
'user'=>array(
'class'=>'User',
'countUserInShard'=>1000,
),
Не не не, это совсем не то. Нельзя ставить класс User extends CActiveRecord в качестве компонента user. Лучше так:AvtoNom писал(а):пока нужен один метод оставлю его в модели User.
Вот только не получается через main.php передать значение в модели User.
Код: Выделить всё
'user'=>array( 'class'=>'User', 'countUserInShard'=>1000, ),
Код: Выделить всё
'user'=>array(
'class'=>'WebUser',
'countUserInShard'=>1000,
),
Код: Выделить всё
....
public function getShardId(){
return floor($this->id/Yii::app()->user->countUserInShard)+1;
}
radamir писал(а):Какую задачу ты перед собой ставишь? Что такое "shardId"? Определение и назначение?
Пусть даже элементарно получить аватарку с проверкой существования ->getAvatar();AvtoNom писал(а): Конкретно сейчас пытаюсь понять куда засунуть метод определения Шарда по id юзера. что бы потом в цикле создавать объекты User по id, получать от них ShardId и ник.