Yii:如何从表中获取一组id

时间:2013-02-02 10:57:44

标签: php validation activerecord yii

假设我有一个包含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()”或类似的东西。

1 个答案:

答案 0 :(得分:1)

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

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

上述代码验证模型owner_id中存在Owner,如果数据库中不存在错误,则会引发错误。