假设我有一个包含2个表的模型:Owner(int:id)和Car(int:id,int:owner_id)。
我正在尝试在Car上构建验证规则,以避免将现有的owner_ids绑定到Car.owner_id字段。我想在代码中使用此验证规则而不是仅使用数据库外键检查,因为它允许我在表单上轻松显示错误消息,而不是稍后处理数据库异常。
因此,在我的模型中,我希望有类似的东西:
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()”或类似的东西。
答案 0 :(得分:1)
您不想验证范围。 Yii为外键检查提供CExistValidator
别名exist
。如果所有者ID不连续,即如果我们删除中间用户,则range
验证器可能会失败。因此,您可以使用验证规则,如下所示
array('owner_id', 'exist', 'attributeName'=>'id', 'className'=>'Owner'),
上述代码验证模型owner_id
中存在Owner
,如果数据库中不存在错误,则会引发错误。