2014-01-13 5 views
0

Я использую CakePHP для отображения интерфейса GUI для таблицы базы данных MySQL. Я использовал bake, чтобы автоматически генерировать экраны, и теперь у меня есть полностью функционирующее приложение с кнопками «Просмотр», «Редактировать» и «Удалить» в строке. Я хочу добавить кнопку в строку, которая называется Accept, которая должна установить IsAccepted = 1 в строке SQL.Изменить строку с помощью CakePHP

мне удалось добавить Accept кнопку в строке следующим образом:

echo $this->Html->link(__('Accept'), array('action' => 'accept', $product['Product']['ID'])) 

Но код в ProductController.php не работает:

public function accept($id = null){ 
    ... 
    $this->Product->IsAccepted = 1; // does not work, silently fails 
} 

Что я делаю неправильно? Как правильно отредактировать строку с помощью кнопки для каждой строки?

+1

Это не то, как работает любая текущая или предыдущая версия CakePHP. Проверьте [кулинарная книга] (http://book.cakephp.org) и всегда указывайте свою точную версию CakePHP! – ndm

+1

также, действие, которое вы вызываете, «одобряет», почему функция называется «принять»? – Nunser

+0

Typo! Сожалею! Моя текущая версия CakePHP - 2.4.4. –

ответ

0

Благодаря cornelb я нашел ответ! Это последний код, который я использовал для изменения строки, с помощью кнопки для каждой строки.

  • Изменяет строку при нажатии на кнопку на построчно (работает так же, как кнопка/AJAX в POST)
  • Вспышка сообщение, которое говорит: «Принято!» показывает, если сохранение успешно
  • Перенаправление обратно на страницу листинга (кажется, никогда не покидают список)

Это код, который идет в ProductController.php (или любой другой контроллер класса есть):

public function accept($id = null) { 
    if ($this->Product->exists($id)) { 

     // save the row 
     // you absolutely need to fill the 'id' slot, even if its not your primary key!! 
     // this ensures that the row is EDITED, and not INSERTED! 
     if($this->Product->save(array('id' => $id, 'ID' => $id, 'IsApproved' => 1, 'ApprovedDate' => date('Y-m-d H:i:s', time())))){ 

       // show a "flash" message 
       // (not Adobe Flash, just a message that shows on top of the list) 
       $this->Session->setFlash(__('The product has been accepted!')); 

       // this action does not have a view so no need to render 
       $this->autoRender = false; 

       // redirect to index view 
       return $this->redirect(array('action' => 'index')); 
     } 
    } 
} 
1
public function accept($id = null){ 
    $this->Product->save(array('id' => $id, 'is_accepted' => 1)); 
} 
+0

Приятная попытка, но этот код исполняет «INSERT» по какой-то причине ... и затем сбой «Duplicate entry» 1 для ключа «PRIMARY»! –

+1

http://book.cakephp.org/2.0/ru/models/saving-your-data.html#model-save-array-data-null-boolean-validate-true-array-fieldlist-array - "Создание или обновление управляется полем идентификатора модели.Если $ Model-> id установлен, запись с этим первичным ключом обновляется. В противном случае создается новая запись ". Пожалуйста, попробуйте варианты, описанные в документации – cornelb

+0

Прохладный! Оно работает! Я добавил свой последний код в качестве ответа ниже. –

0
// assuming cake 2.1+ 
public function accept($id = null){ 
    if($this->Product->exists($id)) { 
     $this->Product->saveField('is_accepted', 1); 
     // success.. 
    } 

    // else throw not found exception... 
} 
0
**Try this.....** 
<?php 
public function accept($id = null) { 
    $this->autoRender = false; // if action has not view. 
    if ($this->Product->exists($id)) { 

     $this->Product->id = $id; 
     if ($this->Product->save(array('is_accepted' => 1))) { 
      $this->Session->setFlash(__('The product has been accepted!')); 
      return $this->redirect(array('action' => 'index')); 
     } 
    } 
} 
?> 
0

Просто запустите UpdateAll запрос от принимаю функции, как показано ниже:

public function accept($id = null){ 

    if(!empty($id)){ 
    $this->Product->updateAll(
    array('Product.is_accepted' => 1), 
    array('Product.id' => $id) 
    ); 
    } 

} 

Надеется, что это поможет ...

Для справки: http://book.cakephp.org/2.0/en/models/saving-your-data.html

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