обязательное поле для поля другой модели в yii

Мне нужно сохранить запись в Первой модели. В нем около 10 полей. Теперь мне нужно применить необходимое правило для одного поля, которое я храню во ВТОРОЙ модели, и я получаю эти значения для этого поля из Третьей модели. (Это поле раскрывающегося списка)

как я могу сделать это поле обязательным в yii ??

может кто-нибудь помочь, пожалуйста ..

Огромное спасибо,


person Developer    schedule 25.01.2013    source источник
comment
если у вас есть необходимое правило во второй модели, и вы передаете в форму второй экземпляр модели, тогда все должно работать   -  person bool.dev    schedule 25.01.2013
comment
так что мне не нужно иметь требуемое правило в нынешней Первой модели ??   -  person Developer    schedule 25.01.2013
comment
все зависит от поля, из того, что я собираю, поле из 2-й модели, а не из первой, следовательно, правило во 2-й модели. если поле присутствует в обеих моделях, вам понадобится правило для них обеих.   -  person bool.dev    schedule 25.01.2013
comment
Ok. Мне нужно сохранить это поле только во второй модели, и это таблица соединения для FIRST и Thrid (в которой хранятся идентификаторы для первой и третьей модели)   -  person Developer    schedule 25.01.2013
comment
@ bool.dev: оба поля во ВТОРОЙ таблице установлены как обязательные в правилах. но как это можно применить к Первой модели. и как я могу передать этот экземпляр в форму ??   -  person Developer    schedule 25.01.2013
comment
вы читали это?   -  person bool.dev    schedule 25.01.2013


Ответы (1)


Вы можете добавить в модель дополнительные атрибуты и правила. Вам не обязательно использовать только атрибуты, которые напрямую относятся к полям в вашей таблице базы данных. Давайте посмотрим на простой пример. У вас есть таблица пользователей (User), в которой есть следующие поля:

  • id
  • Эл. адрес
  • пароль

И у вас есть еще одна таблица, в которой хранится информация профиля пользователя (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
comment
Нет проблем, дайте мне знать, если вы застряли - person Brett Gregson; 28.01.2013