我想为下载对象创建一个唯一的代码
目前该模型正在扩展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);
}
答案 0 :(得分:1)
您的逻辑要求generate_code()
方法中必须存在用户ID。所以这不是“糟糕的做法”。只需将User对象传递给Dowload对象create()
方法(它称为依赖注入)。
我不明白你问题的第二部分,你能更具体一点吗?