Kohana 3 ORM:构造函数“加载后”

Posted

技术标签:

【中文标题】Kohana 3 ORM:构造函数“加载后”【英文标题】:Kohana 3 ORM: constructor "after load" 【发布时间】:2010-09-01 23:50:21 【问题描述】:

Kohana 3 的 ORM 中是否有任何方法可以在模型中运行一段代码,但仅在从数据库加载该模型之后?一个简单的例子是必需的 has_one 关系。

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

现在,如果所有用户都必须拥有一些其他属性,那么如果 Bob 不存在,就必须创建它?现在,在这条线运行的地方,我正在检查空主键,如果是,则指示模型添加该关系。但是有没有办法让模型完成呢?构造函数的问题是模型可以在从数据库填充之前构造为空的,如本示例中所示,所以我不希望那样。

【问题讨论】:

【参考方案1】:

只需创建具有所有所需逻辑的模型方法:

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;

【讨论】:

扩展 find 也可以,但这种方式也可以让 find 单独处理其他事情,如果 find 方法的参数发生变化,升级会更容易一些。【参考方案2】:

尝试在你的模型中重载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;
    


【讨论】:

以上是关于Kohana 3 ORM:构造函数“加载后”的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3.1 都有哪些可用的 ORM 解决方案?

Kohana-v3 ORM 父关系

Kohana 3.2 ORM 验证和表单验证

Kohana 2.3.4 ORM - 删除数据透视表关系

Kohana 3 ORM 中的嵌套关​​系

Kohana 3 ORM 关系问题