В простом проекте с Yii У меня есть модель:Yii -CExistValidator для внешнего ключа
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 метод сохранения() выполнить все валидаторы работают, но не тот, разработанный, чтобы проверить наличие внешнего ключа в модели Items
array('item_id', 'exist', 'on'=>'create', 'attributeName'=>'id', 'className'=>'Items'),
И в случае, если я пытаюсь спасти возвраты который имеет значение в item_id, не имея одного и того же идентификатора в элементах I, которые не имеют никакой ошибки проверки.
Это правильный подход?
Благодаря
Да, это правильный подход, если вы хотите убедиться, что атрибут item_id должен иметь соответствующий идентификатор в другой таблице. Странно, я пробовал тестировать в своем коде, и он работал нормально. Вы уверены, что не забыли установить сценарий перед сохранением? –