2013-02-02 85 views
0

假設我有一個包含2個表的模型:Owner(int:id)和Car(int:id,int:owner_id)。Yii:如何從表中獲取一個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 =所有者: :model() - > findIdsAsArray()「或類似的東西。

回答

1

你不想驗證一個範圍。 Yii提供CExistValidator,其別名爲exist,正好用於外鍵檢查。如果所有者ID不連續,即如果我們刪除中間用戶,則驗證程序可能會失敗。所以,你可以如下

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

上面的代碼驗證,有模型Owner存在一個owner_id,如果它不是在數據庫中存在引發錯誤使用驗證規則。

+0

確實,這個CExistsValidator是一個很好的解決方案。謝謝 ! – ChristopheBrun