web-dev-qa-db-fra.com

Comment mettre à jour 1 champ dans CakePHP?

Je souhaite qu'une fonction modifie un champ "is_featured" en 1(true) du modèle d'événement d'un ID donné, pour marquer un événement comme "En vedette".

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

vous pouvez utiliser saveField pour faire cela par exemple

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

Vous pouvez également utiliser la méthode set ()

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

Vous pouvez effectuer la mise à jour dans un champ de deux manières:

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

OR

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

dans le deuxième exemple, le premier tableau mettra à jour la valeur du champ défini et le deuxième tableau définira la condition "WHERE"

11
Vineet Kumar

Dans Cakephp 3 pour mettre à jour vos données:

  1. Inclure dans votre contrôleur: 

    use Cake\ORM\TableRegistry;

  2. Dans votre action: 

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

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

3
Leonardo Correa

Vous pouvez utiliser cette technique pour mettre à jour le (s) champ (s)

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

Si vous ne souhaitez pas que le champ modifié soit automatiquement mis à jour lors de l'enregistrement de certaines données, ajoutez 'modified' => false à votre tableau $ data Si vous ne transmettez pas l'id, le modèle ne peut pas définir sa clé primaire et va «ajouter» “Éditer” le (s) champ (s)

1
Shinigami

Vous pouvez faire ce moyen facile

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

étrangement; Parfois, j'aime bien utiliser des vieux sql: one-liner + no overhead, m'assure qu'aucun rappel/événement ne soit impliqué (attention ce n'est peut-être pas ce que vous voulez!)

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