在Yii中验证相关模型的属性

时间:2012-10-12 08:07:41

标签: php mysql yii

我在Yii有四个模特。汽车,赛车,豪华汽车和司机。

RaceCar has_one Driver

LuxuryCar has_one Driver

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

LuxuryCar和RaceCar中都有一个“fuel_level”属性可以更改Driver中的验证规则(如果RaceCar.fuel_level为零,则驱动程序不能将属性“action”设置为“driving”)。

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

这可能吗?如果是这样,怎么样?如果没有,是否有更好的方式让我失踪?

2 个答案:

答案 0 :(得分: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!'));
    }
}

答案 1 :(得分: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'; 。例如

{{1}}