我在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)。
这可能吗?如果是这样,怎么样?如果没有,是否有更好的方式让我失踪?
答案 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}}