0

Owner (int: id) と Car (int: id, int:owner_id) の 2 つのテーブルを持つモデルがあるとします。

存在しない owner_ids が Car.owner_id フィールドにバインドされるのを避けるために、Car で検証ルールを構築しようとしています。後で DB 例外を処理する代わりにフォームにエラー メッセージを簡単に表示できるため、DB 外部キー チェックを使用するだけでなく、この検証ルールをコードに含めたいと考えています。

したがって、私のモデルでは、次のようなものが必要です。

public function rules() {
    return array(
        array('owner_id', 'in', 'range' => array(11, 12, 13)),
    );
}

ここで、11、12、13 は既存の所有者 ID です。

これらの ID は、次のようなコードで見つけることができます。

$ars = Yii::app()->db->createCommand("SELECT id FROM owner")->queryAll(); 
$ids = array(); 
foreach($ars as $ar) {    
    $ids[] = $ar['id'];
}

しかし、Yii に "$ids = Owner::model()->findIdsAsArray()" などのようなもっと怠惰な方法でこの配列を取得できる組み込みメソッドがあるかどうか疑問に思いました。

4

1 に答える 1

1

範囲を検証したくありません。Yiiは、外部キーチェック用のCExistValidatorエイリアスを正確に提供します。所有者IDが連続していない場合、つまり中間ユーザーを削除した場合、バリデーターは失敗する可能性がありますexistrangeしたがって、次のように検証ルールを使用できます

array('owner_id', 'exist', 'attributeName'=>'id', 'className'=>'Owner'),

owner_id上記のコードは、モデルにが存在することを検証しOwner、DBに存在しない場合はエラーを発生させます。

于 2013-02-02T12:11:18.050 に答える