2012-03-06 1 views
0

Я хочу, чтобы создать уникальный код для загрузки объекта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 в начале кода. Я думал о вызове статической функции в пользовательской модели, чтобы получить ее, но думаю, что это плохая идея, потому что я прочитал, что лучше сделать модели независимыми от других моделей. Каков лучший способ сделать это, возможно, через значение в данных сеанса (или это плохая практика)?

Вторая проблема заключается в том, что я хотел бы добавить Идентификатор загрузки в конец кода (который является автоматически увеличиваемым значением), однако это значение будет установлено только после его создания, но оно не будет иметь generate_code после создания, потому что столбец кода в базе данных уникален. Есть ли для этого обходное решение?

редактировать: Я установил второй вопрос, добавив идентификатор после того, как была создана например .:

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

Ваша логика требует, что должна быть идентификатор пользователя присутствует в generate_code() методе. Так что это не «плохая практика». Просто передайте объект User для объектов Dowload create() (это называется инъекцией зависимостей). И я не понял вашу вторую часть вопроса, можете ли вы быть более конкретным?

+0

спасибо, что я не слышал об этом раньше. В конце я использовал немного другую работу. Я исправил вторую проблему, добавив идентификатор после создания объекта. – xylar