2010-09-01 29 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; 
    } 

}