Кажется, что нет причины вызывать get_table_data
дважды, один раз с и один раз без $row_id
, потому что вы никогда не используете $table_data['$table_data']
в представлении. В интересах получения чего-то, что работает, первый звонок должен быть исключен. Пересмотренный контроллер выглядит следующим образом.
$table_data['edit_table_data'] = $this->display_model->get_table_data($table_name,$row_id) ;
$form_name='edit_'.$table_name;
$this->load->view('header');
$this->load->view($form_name,$table_data);
$this->load->view('footer');
В коде модели в вопросе отсутствует фигурная скобка }
, чтобы закрыть это утверждение.
if ($row_id != null)
{
Так что немного сложно точно сказать, что вы хотите, если $row_id
не предоставлено. Без дальнейшей информации мое мнение таково, что get_table_data
не должен давать второму аргументу значение по умолчанию. Другими словами, функция должна быть определена без значения по умолчанию для `$ row_id - вот так.
public function get_table_data($table_name, $row_id)
Без значения по умолчанию для `$ row_id 'возникает фатальная ошибка, если значение не указано. Таким образом, контроллер должен убедиться, что значение предоставлено.
Аналогичным образом, контроллер всегда должен проверять возвращаемость модели или модель всегда должна возвращать то, что может использовать представление.
get_table_data()
содержит много повторяющихся кодов - where($table_name.'_id', $row_id)
и get($table_name)->result()
появляются по три раза каждый. Переставляя логику, можно исключить повторяющиеся строки, чтобы сделать функцию намного более краткой. Рассмотрите эту версию.
public function get_table_data($table_name, $row_id)
{
if($table_name === 'user')
{
$this->db
->select($table_name.'.*, country.country_name')
->join('country', 'country.country_id = user.user_country_id', 'left');
}
elseif($table_name === 'user_document')
{
$this->db
->select($table_name.'.* ,document.document_name')
->join('document', 'document.document_id = use_document.document_id', 'left');
}
return $this->db
->where($table_name."_id", $row_id)
->get($table_name)
->row();
}
Вышеприведенное возвращает данные из любого $table_name
, где $table_name."_id" == $row_id
. В случае таблиц «user» или «user_document» добавляются специальные предложения «select» и «join».
Поскольку вас, похоже, интересует только одна строка, вам следует позвонить row()
вместо result()
.
Важно знать, что db->row()
вернет NULL, если записи не найдены. Этот факт можно использовать для проверки возврата модели и соответствующей реакции. В этом случае мы делаем проверку в представлении. Потому что есть только один ряд. foreach
не требуется.
<?php if(isset($edit_table_data)) { ?>
<form method="post" class="form-horizontal" action="<?php echo site_url('admin/edit_row/user_type/'.$edit_table_data->user_type_id) ?>">
<div class="form-group">
<label class="col-sm-4 control-label">User Type Name</label>
<div class="col-sm-8"><input type="text" class="form-control" name="user_type_name" value="<?php echo $edit_table_data->user_type_name ?>"></div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-2 col-sm-offset-2">
<button class="btn btn-primary" type="submit">Edit changes</button>
</div>
</div>
</form>
<?php
}
else { ?> <div>No Data Available</div> <?php } ?>