在Kohana 3的ORM中是否有任何方法可以在模型中运行一大块代码,但只有在从数据库加载该模型之后?一个简单的例子是必需的has_one关系。
ORM::factory('user')->where('name', '=', 'Bob')->find();
现在如果所有用户都必须拥有其他属性,那么如果Bob不存在,则必须创建它?现在,在这一行运行的地方,我正在检查空主键,并指示模型添加该关系,如果是这样的话。但有没有办法让模型完成它?构造函数的问题是模型可以在从DB填充之前构造为空,如本示例中所示,因此我不希望这样。
答案 0 :(得分: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;
}
}
答案 1 :(得分: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;
}