ti-enxame.com

Como atualizo um campo no CakePHP?

Eu quero uma função para alterar um campo, "is_featured" para 1(true) do modelo de evento de determinado ID, para marcar um evento como "em destaque".

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

você pode usar o saveField para fazer isso por exemplo

$this->Event->id = $id;
$this->Event->saveField('is_featured', true);
74
dqminh

Você também pode usar o método set ()

$this->Model->read(null, $id);
$this->Model->set(array(
      'fieldname' => 'value',
));
$this->Model->save();
11
Dimpal Gohil

Você pode executar a atualização em um campo de duas maneiras:

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

OR

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

no segundo exemplo, a primeira matriz atualizará o valor no campo definido e a segunda matriz definirá a condição "WHERE"

11
Vineet Kumar

No cakephp 3 para atualizar seus dados:

  1. Inclua no seu controlador: 

    use Cake\ORM\TableRegistry;

  2. Em sua ação: 

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

Fonte: http://book.cakephp.org/3.0/en/orm/saving-data.html

3
Leonardo Correa

Você pode usar essa técnica para atualizar o (s) campo (s)

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

Se você não quiser que o campo modificado seja atualizado automaticamente ao salvar alguns dados, adicione 'modified' => false ao seu array $ data Se você não passar o id, o modelo não pode definir sua chave primária e irá “adicionar” em vez de “editar” o (s) campo (s)

1
Shinigami

Você pode fazer isso de maneira fácil

$this->Event->saveField('username', $user); //Where username is Model field name and $user is value
0
A.A Noman

estranhamente; às vezes eu gosto de recorrer a sql antigo simples: one-liner + sem sobrecarga, me dá certeza de que não há callbacks/eventos envolvidos (cuidado, isso pode não ser o que você quer!)

$id = (int) $id;
$this->Event->query("UPDATE events SET is_featured=1 WHERE id=$id");
0
ptica