1

我在 Yii 中有四个模型。汽车、RaceCar、LuxuryCar 和 Driver。

RaceCar has_one 车手

LuxuryCar has_one Driver

RaceCar 和 LuxuryCar 都继承自同一个模型 - Car - 使用相同的表继承。

LuxuryCar 和 RaceCar 中都有一个“fuel_level”属性,它改变了 Driver 中的验证规则(如果 RaceCar.fuel_level 为零,Driver 应该不能将属性“action”设置为“driving”)。

而不是必须添加所有可能的“属于”与 Driver 的关系(我可能会添加更多继承的 Car 模型),然后检查 Driver 当前属于哪种 Car,这样我就可以从数据库中加载模型再次,我希望能够验证父级(例如 RaceCar)中 Driver 属性的值。

这可能吗?如果是这样,怎么做?如果没有,有没有更好的方法让我想念?

4

2 回答 2

6

driver一种解决方案是简单地为您的汽车属性添加自定义(例如内联)验证规则:

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属于Driver使用instanceOf运算符。例如

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 回答