Идентификатор строки перечисляемой таблицы в Codeigniter - PullRequest
2 голосов
/ 18 ноября 2011

Предположим, что есть таблица user

id_user | name | id_state

1       | John |   2

и таблица user_state

id_status | description

2         | User Active

с использованием Codeigniter, что является лучшим способом сделать что-то связанное с этим id_status, не имеяцелое число жестко закодировано в моем коде ??пример:

if($user->id_status == 2){
    // do something
}

..

на самом деле я использовал в других проектах класс для создания "enums":

Enum::Create('UserState', 'inactive', 'active', 'banned', 'deleted');

и их ..

echo UserState::GetDatabaseID(UserState::active); // result: 2

.. и я думаю, что это хорошее решение, но я никогда не использовал его в проекте Codeigniter

Ответы [ 3 ]

3 голосов
/ 19 ноября 2011

Я бы сделал метод в модели, который запрашивает обе таблицы и возвращает объект с атрибутом статуса, чтобы вы могли получить доступ к названию статуса. Я обычно создаю поле name или slug в виде строчного имени без пробелов для ссылки в моем коде и поля * display_name * для отображения в представлениях.

Итак, в вашей модели сделайте что-то вроде этого:

public function get_user_info($user_id)
{
    return $this->db
        ->select('user.*, user_state.*, user_state.id AS user_state_id') // to avoid a conflicts when referencing the ID
        ->where('id', $user_id)
        ->join('user_state', 'user_state.id = user.id_state')
        ->get('user')
        ->result();
}

Тогда у вас будет доступ к $user->status->slug в вашем контроллере для ссылки на «активный» или любой другой статус, который вы хотите, а затем $user->status->display_name в ваших представлениях для распечатки понятного имени.

0 голосов
/ 19 ноября 2011

Если эта таблица user_state достаточно мала (то есть <10 состояний), я бы посоветовал просто поместить массив прямо в ваше приложение. Так что определите какое-нибудь высокоуровневое свойство в вашей My_Model, например, которое говорит: </p>

$this->user_states = array(
    'active'=>2,
    'deleted'=>3,
    'new'=>4,
    'verified'=>5
);

Затем в вашем коде вы просто используете что-то вроде

if ($this->id_status == $this->user_states['active']) {
}
0 голосов
/ 19 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...