пакетное обновление codeigniter определенного поля формы на основе его идентификатора

Я пытаюсь сделать update_batch в codeigniter максимально лаконичным способом. Моя форма состоит из цикла, в котором я генерирую набор полей ввода, которые будут влиять на столбец val моей базы данных extra_config:

<?php echo form_open('config/edit') ?>
<table>
<?php foreach ($config_by_page[$i] as $config_item): ?>
<tr class="config-row">
    <td><?php echo $config_item['description'] ; ?></td>
    <td class="edit"><input required data-id="<?php echo $config_item['id'] ?>" name="val" value="<?php echo $config_item['val'] ; ?>"></input></td>
</tr>
<?php endforeach; ?>
</table>
</form>

Прямо сейчас - у меня есть идентификатор строки, к которой каждый "val" должен быть привязан, хранящийся в атрибуте данных data-id, потому что я не уверен, как сделать update_batch() и вставить val в соответствующую строку таблицы.

Вот мой контроллер:

$data = $this->input->post(NULL, TRUE);
$this->config_model->edit_config($data);

а вот моя модель:

public function edit_config($data){
  $this->db->update_batch('extra_scenarios', $data,'id');
}

Как наиболее лаконично указать идентификатор строки, в которую должно отправляться пакетное обновление? Я не хочу создавать большой массив данных вручную, потому что мне нужно обновить почти 100 различных строк.


person mheavers    schedule 25.11.2015    source источник
comment
вы пытаетесь обновить поле val??   -  person Niranjan N Raju    schedule 25.11.2015
comment
да, обновите поле val, где столбец id равен атрибуту id из поля ввода (или получите этот входной идентификатор другим способом)   -  person mheavers    schedule 25.11.2015


Ответы (2)


вот проблема

name="val"

это должен быть массив

name="val[]"
person Niranjan N Raju    schedule 25.11.2015
comment
Извините - я запутался - как он узнает, что val должен быть привязан к соответствующему id? В моей таблице есть несколько столбцов, и ей нужно знать, чтобы обновить поле val каждой строки, где идентификатор равен идентификатору из сообщения. - person mheavers; 25.11.2015
comment
смотри ответ выше, делай так, name="val[database id here]" - person Niranjan N Raju; 25.11.2015
comment
Если я сделаю это без изменения модели или контроллера, я получу: One or more rows submitted for batch updating is missing the specified index. - person mheavers; 25.11.2015
comment
$data из поста выглядит так: Array ( [val] => Array ( [3] => 37.10119357072203 [4] => -122.06634521484374 [5] => 37.51571709945411... - person mheavers; 25.11.2015
comment
Я понял это - ваш ответ был полезен. Когда у вас есть val[] для каждого поля, вы можете изменить модель, чтобы создать массив массивов: содержащий ключ и значение: foreach ($data['val'] as $i=>$val_item){ $val_data[] = array( 'id' => $i, 'val' => $val_item ); } и $this->db->update_batch('extra_config', $val_data,'id'); - person mheavers; 25.11.2015
comment
Рад, что смог вам помочь :) - person Niranjan N Raju; 25.11.2015

Вы можете изменить имя поля ввода, как показано ниже, чтобы получить массив конфигурации при отправке:

<input required name="config[<?php echo $config_item['id'];?>]" value="<?php echo $config_item['val'] ; ?>"/>
person ranakrunal9    schedule 25.11.2015
comment
Спасибо - я не уверен, как изменить мою модель, чтобы использовать эти данные? - person mheavers; 25.11.2015