2012-03-02 2 views
0

특정 행을 업데이트해야합니다. 이것은 효과가없는 것 같습니다. 어떤 도움을 주셔서 감사합니다. 업데이트cakephp에서 행 업데이트하기

보기 : 업데이트

<?php 
echo $this->Form->create("Setting", array('action' => 'index')); 
echo $this->Form->input('id', array('type' => 'hidden')); 
echo $this->Form->checkbox('blog_state'); 
echo $this->Form->end('Save Post'); 
?> 

컨트롤러 :

public function index($id = 0){ 
    $this->Setting->id = $id; 
    if (empty($this->request->data)) { 
     $this->request->data = $this->Setting->read(); 
    } else { 
     if ($this->request->is('post')) { 
      $this->request->data['Setting']['id'] = $id; 
      $this->Setting->save($this->request->data); 
      $this->Session->setFlash('This should have saved...'); 
     } 
    } 
} 

편집 : blog_state은 부울이며, 잘 작동합니다. DB의 값을 정상적으로로드하여 정상적으로 새로운 행에 저장합니다. (내 문제가있는 곳에서 끌어온 기존 행을 업데이트해야합니다.)

답변

1

업데이트보기처럼 액세스 할 수 있습니다

당신은 또한 당신의 ID를 설정 확인해야합니다 함수가 올바르게 값을 채 웁니다. 업데이트중인 PK ID를 아는 경우가 아니면 레코드를 업데이트 할 수 없습니다. 이 작업을 수행 할 수

방법은 요청 데이터를 설정하는 것입니다 :

$this->request->data['Setting']['id'] = $id; 

는 그 다음 자동보기 설정됩니다. 당신의 논리는 결함이 할 수처럼

UPDATE는

것 같습니다. 이 양식은 반드시 ID를 URL로 다시 전달하지 않습니다. 따라서 양식을 업데이트하고 작동하는지 다시 확인하십시오. 그것은 당신이 현재 갖고있는 것과 같은 것처럼 보입니다. 그것은 새로운 레코드를 생성 할 ID를 null로 설정할 것입니다.

public function index($id = 0){ 
    if (empty($this->request->data)) { 
     $this->Setting->id = $id; 
     $this->request->data = $this->Setting->read(); 
    } else { 
     if ($this->request->is('post')) { 
      $this->Setting->save($this->request->data); 
      $this->Session->setFlash('This should have saved...'); 
     } 
    } 
} 
+0

그건 내 배열을 고정. ID가 올바르게 설정되었지만 저장하지 않습니다. ** INSERT INTO'settings' ('blog_state','modified','created') VALUES (1, '2012-03-01 23:27:05', '2012-03-01 23:27:05 ') ** – alairock

+0

양식을 확인하십시오. ID가 처리되지 않는 것 같습니다. 양식에 나타나는지 확인하십시오. –

+0

예, 양식에 표시됩니다. 업데이트 된 컨트롤러 및 위의보기 : – alairock

0

글쎄, 어떤 행이 효과가 있는지 알아야합니다. (이것은 일반적으로 함수의 인수가됩니다).

public function index() { 
    // Things here 
} 

이렇게하면 해당 컨트롤러의 색인 페이지가 만들어집니다.

public function edit($id = null) { 
    $this->Setting->id = $id; 
    if (!$this->Setting->exists()) { 
     // Exception. 
    } 

    if ($this->Setting->save($this->request->data)) { 
     $this->Session->setFlash(__('Saved')); 
    } 
} 

같은 편집 기능 만들기 그럼 당신은 http://example.com/setting/edit/45

+0

나는 이것이 올바른 것으로 알고 있지만, 지수() 함수에 저장도 가능하다? 간단히하기 위해 컨트롤러에 두 번째 기능을 추가하고 싶지 않았습니다. 이것이 나쁜 습관이라면 알려주세요. – alairock

+0

기능을 실제로 할당 할 수 있습니다. 색인 포함. 그러나 색인은 URL에 쓰여진 "색인"이 필요 없다는 점에서 고유합니다. 그러나 edit() 함수를 사용하면 올바른 REST 방식을 따르게됩니다. 편집 기능을 추가하는 데는 시간이 조금 걸립니다. – arcynum

0

는 다음과 같은 모델에서 선택한 기본 키를 무시하지 않으면 당신은 당신의 DB에서 기본 키 ID 열이 있는지 확인합니다.

<?php 

클래스 테스트는 AppModel을 확장 {

public $primaryKey = 'primarykey column name'; 

} ?>

관련 문제