Вы можете добавить в модель дополнительные атрибуты и правила. Вам не обязательно использовать только атрибуты, которые напрямую относятся к полям в вашей таблице базы данных. Давайте посмотрим на простой пример. У вас есть таблица пользователей (User), в которой есть следующие поля:
И у вас есть еще одна таблица, в которой хранится информация профиля пользователя (UserProfile), которая имеет структуру:
- id
- ID пользователя
- страна
Когда пользователь создает свою учетную запись, у вас будет форма, которая фиксирует их информацию. Ваша модель пользователя будет иметь такие правила, как:
array('email, password', 'required'),
array('email', 'unique', 'message'=>'Email already in use'),
...
Вы можете добавить атрибут для страны в свою модель пользователя следующим образом:
class User extends CActiveRecord {
public $country;
...
А затем в свои правила вы можете добавить новый атрибут:
array('email, password, country', 'required'),
array('email', 'unique', 'message'=>'Email already in use'),
...
Атрибут страны теперь будет частью вашей модели пользователя. Теперь вы можете добавить это в свою форму:
<?php echo $form->dropDownList($model,'country',CHtml::listData(Country::model()->findAll(),'id','country_name'),array('empty'=>'-- select a country --')); ?>
Теперь при отправке формы метод $model->validate()
проверит поле страны. Вы можете сохранить это вручную во второй модели (UserProfile), например:
if(isset($_POST['User'])){
if ($model->validate()){
$user_profile = new UserProfile;
$user_profile->user_id = $model->id;
$user_profile->country = $model->country;
$user_profile->save();
...
Надеюсь, это ответ на ваш вопрос.
person
Brett Gregson
schedule
26.01.2013