2011-06-02 44 views

回答

3

) 據我知道有沒有普遍的「唯一」(或「is_unique」)驗證類的規則。 這可能是因爲這種檢查不規律。然而,如果你想做得很好,你可以爲你在你的應用程序中使用的所有模型創建一個「基礎模型」(使它們基於擴展爲)。 然後,唯一可以確認或多或少是這樣的:

public function is_unique($id) 
{ 
    return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total')) 
     ->from($this->_table_name) 
     ->where('id', '=', $id) 
     ->execute() 
     ->get('total'); 
} 

在您需要添加此規則,您的驗證規則:

array('id' => array(array(array($this, 'is_unique'))); 

我存儲在方法rules()內部模型的規則,按照建議。 所以這個可能是一個活生生的例子:

class Model_Base_Model extends ORM 
{ 
    public function rules() 
    { 
     return array(
      'id' => array(
       array(array($this, 'is_unique')), 
      ); 
    } 


    public function is_unique($id) 
    { 
     return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total')) 
      ->from($this->_table_name) 
      ->where('id', '=', $id) 
      ->execute() 
      ->get('total'); 
    } 
} 

現在延長Model_Base_Model每一個模型將現在能夠檢查它的獨特性,同時創造。 希望這有助於! :)

+0

再次感謝您!我實施了非常類似的解決方案。 – 2011-06-02 19:23:11

3

在Kohana 3.2 ORM有一個獨特的()方法做檢查,我不確定它是否存在於3.1中,但它應該。

有了,你可以只添加一個規則,以你的模型是這樣的:

array(array($this, 'unique'), array('some_field', ':value')), 

,它會檢查是否some_field是唯一

+0

是的,這可以像KO 3.2中的魅力一樣在箱子內運作。無論如何,這個問題涉及到v3.1。謝謝! – 2012-03-12 18:36:14