В простом проекте с Yii у меня есть модель:
Checkins.php
* The followings are the available columns in table 'checkins':
* @property integer $id
* @property integer $user_id
* @property integer $item_id
* @property double $lat
* @property double $long
Два значения $user_id и $item_id принадлежат двум другим таблицам:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'Users', 'user_id'),
'item' => array(self::BELONGS_TO, 'Items', 'item_id'),
);
}
Я определил некоторый валидатор:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('user_id, item_id, lat, long', 'required'),
array('item_id', 'exist', 'on'=>'create', 'attributeName'=>'id', 'className'=>'Items'),
array('user_id, item_id', 'numerical', 'integerOnly'=>true),
array('lat, long', 'numerical'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, user_id, item_id, lat, long', 'safe', 'on'=>'search'),
);
}
При выполнении в actionCreate метода save() работают все валидаторы, но не тот, который предназначен для проверки наличия внешнего ключа в Items модели
array('item_id', 'exist', 'on'=>'create', 'attributeName'=>'id', 'className'=>'Items'),
И в случае, если я попытаюсь сохранить Checkins, который имеет значение в item_id, не имея того же идентификатора в Items, у меня не возникнет ошибки проверки.
Это правильный подход?
Спасибо
answered
. 04.04.2012