2009-08-13 8 views
0

В моем приложении cakephp у меня есть модель Option.Редактирование и сохранение нескольких записей в cakephp

В моем варианте/индексном представлении я отображаю 2 варианта со входами и полями переключателей. Я хочу обновить их оба, но я получаю странное поведение.

Опция, которую я изменяю, не сохраняется, и вместо нее добавляется новая опция с новым значением.

Вот мой взгляд

<h2 class='page-title' id='manage-options'>Opzioni</h2> 
<?php echo $form->create(null, array('action'=>'index')); ?> 
<table> 
    <tr> 
    <td><?= $options[0]['Option']['name']?></td> 
    <td><?= $form->radio( 
        $options[0]['Option']['id'], 
        array( 
         '1' => 'Sì', 
         '0' => 'No'), 
       array('default'=> $options[0]['Option']['value'], 'legend'=>false) 
    );?> 
     </td> 
    </tr> 
    <tr> 
     <td><?= $options[1]['Option']['name']?></td> 
    <td><?= $form->input($options[1]['Option']['id'],array('label'=>false,'value' => $options[1]['Option']['value']))?></td> 
    </tr>          
</table>  
<?php echo $form->submit('Salva'); ?> 
<?php echo $form->end(); ?> 

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

function index() { 
    if (!empty($this->data)) { 
     foreach($this->data['Option'] as $id => $value) : 
      $this->Option->id = $id;  
      $feedback = $this->Option->read(); 
      $this->Option->saveField('value', $value); 
     endforeach;   
     $this->Session->setFlash('Opzioni aggiornate'); 
    } 
    $this->Option->recursive = 0; 
    $this->set('options', $this->paginate()); 
} 

Перед отправкой здесь я провел два часа прибегая к помощи ответов и экспериментировать. Я знаю о saveAll() и я попробовал эти решения:

http://planetcakephp.org/aggregator/items/2172-cakephp-multi-record-forms http://teknoid.wordpress.com/2008/10/27/editing-multiple-records-with-saveall/

Я подкорректировал свой код, чтобы соответствовать этим моделям, но я не получил никаких результатов (колеблющийся между «не работает» и «не работает и Я получаю дополнительную запись '), поэтому я решил опубликовать свой оригинальный код.

Вы можете помочь, указав наиболее подходящий способ сделать это? Cheeers, Davide

ответ

1

Проблема была связана с данными в БД. Добрые люди на канале IRC cakephp обратили мое внимание на то, что в большинстве баз данных ID = 0 равно «новой записи». По какой-то причине у меня была опция с идентификатором 0, поэтому при обновлении подкласса mysql-запроса фактически была создана новая запись. Изменены идентификаторы, исправлена ​​проблема.

0

Основная проблема с вашим кодом, который я вижу, заключается в том, что ваши поля, как радио, так и вход, строятся только с идентификационным значением в качестве первого параметра. Правильный «торт» построения поля имеет первый параметр: Model.fieldname, в вашем случае я полагаю, что это будет $ form-> input ('Option.id', array())?>

Если вы проверите html, сгенерированный вашим кодом, вы увидите, что имя поля - это данные [id], и это должны быть данные [Option] [id], если вы хотите перебрать $ this-> data ['Option'] в свой контроллер.

Попробуйте изменить свой код, чтобы включить имя Model.fieldname в качестве первого параметра, а затем он должен правильно передать данные вашему контроллеру.

+0

Первый параметр не является идентификатором, это индекс массива, указывающий на N-й элемент массива результатов. Кроме того, полные поля ввода корректны (данные [Option] [id]). В любом случае, спасибо за предложение, но оно не применяется. – nutsmuggler

Смежные вопросы