Kohana ORM создает уникальный код на основе атрибутов других моделей - PullRequest
0 голосов
/ 06 марта 2012

Я хочу создать уникальный код для объекта загрузки

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

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

edit: я исправил вторую проблему, добавив идентификатор после ее создания, например:

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 Ответ

1 голос
/ 06 марта 2012

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

...