2012-03-05 50 views
0

我試圖爲我的一個ORM模型獲取一些驗證設置。

我有2個表:父母和孩子。在子表中,有一個名爲'parent'的列,其值是父表中行的主ID。

我想要做的是創建一個驗證規則,檢查父表中檢測父實際存在的父ID。

有沒有簡單的方法來做到這一點?

回答

1

嗯,我確實想出了一個解決方案。我在Model類中創建了一個靜態方法,它接受一個I​​D作爲參數,並檢查該行是否存在。

所以我Model_Child有規則功能,像這樣:

public function rules() 
{ 
    return array(
     'parent' => array(
      // will call Model_Parent::exists($value) 
      array(array('Model_Parent', 'exists')) 
     ) 
    ); 
} 

然後我Model_Parent有以下幾點:

public static function exists($id) { 
    $results = DB::select('*')->from('parent')->where('id', '=', $id)->execute()->as_array(); 
    if(count($results) == 0) 
     return FALSE; 
    else 
     return TRUE; 
} 

這是爲我工作。有沒有更優雅的適當的解決方案?

0

在MySQL中(因爲這個問題被標記爲mysql),您可以定義父表和子表之間的外鍵關係,並將該問題留給系統。

+0

好吧,它看起來像是阻止在表中創建條目。如果外鍵約束失敗,Kohana拋出一個數據庫異常。我想我正在尋找更多Kohana特定的解決方案,所以我刪除了MySQL標籤。感謝您的幫助! – krische 2012-03-06 03:48:20