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 の 2 つの値は、他の 2 つのテーブルに属します。
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() を実行すると、すべてのバリデーターが機能しますが、モデル項目内の外部キーの存在をチェックするように設計されたバリデーターは機能しません。
array('item_id', 'exist', 'on'=>'create', 'attributeName'=>'id', 'className'=>'Items'),
そして、アイテムに同じIDを持たずにitem_idに値を持つチェックインを保存しようとすると、検証エラーが発生します。
これは正しいアプローチですか?
ありがとう