0

假设我有一个带有 2 个表的模型:所有者(int:id)和 Car(int:id,int:owner_id)。

我正在尝试在 Car 上构建验证规则,以避免将不存在的 owner_ids 绑定到 Car.owner_id 字段。我希望在代码中使用此验证规则,而不是仅使用 DB 外键检查,因为它允许我轻松地在表单上显示错误消息,而不必稍后处理 DB 异常。

因此,在我的模型中,我想要类似的东西:

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()”或类似的东西。

4

1 回答 1

1

您不想验证范围。Yii为外键检查提供CExistValidator了别名。如果所有者 ID 不连续,即如果我们删除中间用户,验证器可能会失败existrange所以您可以使用如下验证规则

array('owner_id', 'exist', 'attributeName'=>'id', 'className'=>'Owner'),

上面的代码验证owner_id模型中是否存在一个,Owner如果数据库中不存在则引发错误。

于 2013-02-02T12:11:18.050 回答