Обновление строки в cakephp - PullRequest
0 голосов
/ 02 марта 2012

Мне нужно обновить определенную строку.Это не похоже на работу.Любая помощь приветствуется.

Просмотр обновление :

<?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 является логическим значением и работает нормально.Он обычно загружает значение из БД и обычно сохраняет его в новую строку.(Мне нужно обновить существующую строку, из которой она извлекается, и в этом моя проблема)

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Обновите ваш взгляд:

<?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 Page');
?>

Вам также необходимо убедиться, что вы установили идентификатор в функции, чтобы он правильно заполнял значение. Запись не может быть обновлена, если ей не известен идентификатор PK, который она обновляет.

Это можно сделать, установив его в данных запроса:

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

Тогда это будет автоматически установлено в представлении.

UPDATE

Похоже, ваша логика может быть ошибочной. Форма не обязательно будет передавать идентификатор обратно в URL. Так что обновите свою форму и проверьте еще раз, работает ли она. Похоже на то, что у вас сейчас есть, он установит ID на нуль, что создаст новую запись.

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 голосов
/ 02 июля 2014

Убедитесь, что у вас есть столбец идентификатора первичного ключа в вашей БД, если он не переопределяет выбранный вами первичный ключ в модели, как показано ниже.

<?php

Класс Test расширяет AppModel {

public $primaryKey = 'primarykey column name';

}?>

0 голосов
/ 02 марта 2012

Ну, вам нужно знать, на какую строку это влияет (обычно это будет аргумент вашей функции).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...