Kohana ORM基于其他模型属性创建唯一代码

时间:2012-03-06 11:17:03

标签: php kohana kohana-3 kohana-orm

我想为下载对象创建一个唯一的代码

目前该模型正在扩展Kohana的创建功能

public function create(Validation $validation = NULL)
{
    // fails as there is no $user_id passed through...
    $this->code = $this->generate_code($user_id);

    parent::create($validation);
}

正在致电:

protected function generate_code($user_id)
{
    $code = $user_id.str_pad($this->id, 6, '0', STR_PAD_LEFT);

    return $code;
}

我有两个问题:首先我想在代码的开头使用user_id。我正在考虑在用户模型中调用一个静态函数来获取它,但认为这是一个坏主意,因为我已经读过它最好使模型独立于其他模型。有什么更好的方法可以通过会话数据中的值(或者那种不好的做法)来做到这一点?

第二个问题是我想将下载ID添加到代码的末尾(这是一个自动递增的值),但是这个值只有在创建后才会设置,但是它会失败后会生成generate_code创建,因为数据库中的代码列设置为唯一。这有一个优雅的解决方法吗?

编辑: 我通过在创建后添加id来修复第二个问题,例如:

public function create(Validation $validation = NULL, $user_id)
{
    $this->code = $user_id.time();

    parent::create($validation);

    $this->code = $this->code.str_pad($this->id, 6, '0', STR_PAD_LEFT);
}

1 个答案:

答案 0 :(得分:1)

您的逻辑要求generate_code()方法中必须存在用户ID。所以这不是“糟糕的做法”。只需将User对象传递给Dowload对象create()方法(它称为依赖注入)。 我不明白你问题的第二部分,你能更具体一点吗?