Как мне обновить 1 поле в CakePHP? - PullRequest
32 голосов
/ 01 сентября 2010

Я хочу, чтобы функция изменила одно поле, "is_featured" на 1 (true) модели события с указанным ID, чтобы пометить событие как "Featured".

class EventsController extends AppController{
function feature($id){}
}

Ответы [ 7 ]

74 голосов
/ 01 сентября 2010

вы можете использовать saveField для этого например

$this->Event->id = $id;
$this->Event->saveField('is_featured', true);
12 голосов
/ 20 июня 2013

Вы можете выполнить обновление в одном поле двумя способами:

    $this->Model->id=$id;
    $this->Model->saveField("fieldName","value");

ИЛИ

    $this->Model->updateAll(array("fieldName"=>"value"),array("fieldName"=>"condition"));

во втором примере, первый массив обновит значение в определенном поле, а второй массив определяетусловие "ГДЕ"

11 голосов
/ 24 ноября 2014

Вы также можете использовать метод set ()

$this->Model->read(null, $id);
$this->Model->set(array(
      'fieldname' => 'value',
));
$this->Model->save();
3 голосов
/ 21 октября 2016

В CakePHP 3 для обновления ваших данных:

  1. Включить в свой контроллер:

    use Cake\ORM\TableRegistry;

  2. Вваше действие:

    $articlesTable = TableRegistry::get('Articles');
    $article = $articlesTable->get(12); // Return article with id 12
    
    $article->title = 'CakePHP is THE best PHP framework!';
    $articlesTable->save($article);
    

Источник: http://book.cakephp.org/3.0/en/orm/saving-data.html

1 голос
/ 11 сентября 2015

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

$this->Event->save($this->request->data, true, array('id', 'is_featured'))

Если вы не хотите, чтобы измененное поле автоматически обновлялось при сохранении некоторых данных, добавьте 'modified' => false в массив $ dataЕсли вы не передадите идентификатор, модель не сможет установить свой первичный ключ и «добавит» вместо «редактирования» поля (полей)

0 голосов
/ 17 сентября 2017

Вы можете сделать это простым способом

$this->Event->saveField('username', $user); //Where username is Model field name and $user is value
0 голосов
/ 24 августа 2017

странно; иногда я предпочитаю прибегнуть к простому старому sql: однострочно + нет накладных расходов, я уверен, что никакие обратные вызовы / события не участвуют (будьте осторожны, это может быть не то, что вы хотите!)

$id = (int) $id;
$this->Event->query("UPDATE events SET is_featured=1 WHERE id=$id");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...