2010-09-01 28 views
3

Kohana 3的ORM是否有任何方式在模型中運行一段代碼,但只有在從數據庫加載該模型之後?一個簡單的例子是一個必需的has_one關係。Kohana 3 ORM:構造函數「加載後」

ORM::factory('user')->where('name', '=', 'Bob')->find(); 

現在,如果所有用戶都必須有一些其他的特性,因此,如果鮑勃不存在,它必須要創建?現在,在該行正在運行的地方,我正在檢查空主鍵,並指示模型添加該關係。但是有沒有什麼辦法讓模型完成它?構造函數的問題在於模型可以在從數據庫填充之前構建爲空,如在此示例中所示,所以我不想那樣做。

回答

3

只需創建模型的方法與所需的全部邏輯:

public function get_user($username) 
{ 
    $this->where('name', '=', $username)->find(); 
    if (! $this->_loaded) 
    { 
     // user not found 
    } 
    else 
    { 
     // user exists, do something else 
    } 
    // make it chainable to use something like this: 
    // echo ORM::factory('user')->get_user('Bob')->username; 
    return $this; 
} 
+0

延長髮現將工作很好,但這樣會留下找到獨處其他並且如果參數在查找方法上發生變化,可以使它更容易升級。 – joelpittet 2010-09-05 19:48:09

3

嘗試超載模型中的find()方法:

class Model_User extends ORM { 

    public function find($id = NULL) { 
     $result = parent::find($id); 
     if (!$result->loaded()) { 
      // not found so do something 
     } 
     return $result; 
    } 

}