2009-08-13 4 views
0

내 cakephp 앱에 Option 모델이 있습니다.cakephp에서 여러 레코드 편집 및 저장

내 옵션/인덱스보기에는 입력 및 라디오 버튼 필드가있는 2 개의 옵션이 표시됩니다. 둘 다 업데이트하고 싶지만 이상한 행동을합니다.

변경하는 옵션이 저장되지 않고 새로운 값으로 새 옵션이 삽입됩니다.

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()); 
} 

여기에 게시하기 전에 나는 답을 인터넷 검색 및 실험 두 시간 동안 :

여기 내보기

<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(); ?> 

그리고 내 컨트롤러입니다. 나는 약 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

문제가 DB의 데이터와 관련이 있습니다. cakephp IRC 채널의 친절한 사람들은 대부분의 데이터베이스 ID = 0이 '새 레코드'와 동일하다는 사실에 관심을 보였습니다. 어떤 이유로 나는 ID 0을 가진 옵션을 가지고 있었기 때문에, 밑에있는 mysql 쿼리를 업데이트 할 때 실제로 새로운 레코드가 만들어졌다. ID가 변경되어 문제가 해결되었습니다.

0

내가보기에 알 수있는 코드의 주요 문제점은 라디오와 입력 필드가 첫 번째 매개 변수로만 ID 값으로 작성된다는 것입니다. 필드를 작성하는 올바른 "케이크 방법"은 첫 번째 매개 변수가 Model.fieldname 인 경우 귀하는 $ form-> input ('Option.id', array())가 될 것이라고 믿습니다.>

코드에 의해 생성 된 html을 검사하면 필드 이름이 data [id]이고, $ this-> data [ 'Option']을 반복하려면 data [Option] [id] 여야합니다. 제어 장치.

첫 번째 매개 변수로 Model.fieldname을 포함하도록 코드를 변경 한 다음 컨트롤러에 올바르게 제출 된 데이터가 있어야합니다.

+0

첫 번째 매개 변수는 ID가 아니며 결과 배열의 N 번째 요소를 가리키는 배열 인덱스입니다. 또한 genereated 입력 필드는 완벽하게 정확합니다 (data [Option] [id]). 어쨌든 제안 해 주셔서 감사하지만 적용되지 않습니다. – nutsmuggler