1

Yii には 4 つのモデルがあります。車、RaceCar、LuxuryCar、および Driver。

RaceCar has_one ドライバー

LuxuryCar has_one ドライバー

RaceCar と LuxuryCar はどちらも、同じテーブル継承を使用して同じモデル (Car) から継承します。

LuxuryCar と RaceCar の両方に "fuel_level" 属性があり、ドライバーの検証ルールを変更します (RaceCar.fuel_level がゼロの場合、ドライバーは属性 "action" を "driving" に設定できません)。

可能なすべての「所属」関係を Driver に追加するのではなく (継承された Car モデルをさらに追加する可能性があります)、Driver が現在どの種類の Car に属しているかを確認して、データベースからモデルをロードできるようにします。繰り返しますが、親 (RaceCar など) で Driver のプロパティの値を検証できるようにしたいと考えています。

これは可能ですか?もしそうなら、どのように?そうでない場合、私が見逃しているより良い方法はありますか?

4

2 に答える 2

6

driver1 つの解決策は、車の属性にカスタム (インラインなど) 検証ルールを追加することです。

public function rules() {
    return array('driver', 'validateDriver');
}

public function validateDriver() {
    if (!$this->driver->isFoo) {
        $this->addError('driver', Yii::t('validation', '{attribute} is not foo!'));
    }
}
于 2012-10-12T08:23:26.697 に答える
0

私があなたの問題を正しく理解していれば、あなたはこれが欲しい

Driverモデルにリレーションを次のように追加します

'car' => array(self::BELONGS_TO, 'Car', 'car_id'),

そして、使用演算子にCar属するタイプを確認します。例えばDriverinstanceOf

if($model->car insatnceOf RaceCar)
    echo 'Its a racecar';
elseif($model->car instanceOf LuxuryCar)
    echo 'Its a luxury car';
于 2012-10-12T08:23:07.573 に答える