2010-09-01 20 views
31

Quiero que una función modifique un campo, "is_featured" a 1 (verdadero) del modelo de evento de la identificación dada, para marcar un evento como "Destacado".¿Cómo actualizo 1 campo en CakePHP?

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

Respuesta

68

puede utilizar saveField hacer esto por ejemplo

$this->Event->id = $id; 
$this->Event->saveField('is_featured', true); 
+0

¿La función saveField pertenece al controlador o a la clase de modelo? – gkalikapersaud

+2

@ user2128444 Es una función de modelo, pero puede usarla tanto en su controlador como en su modelo. El ejemplo en la respuesta se colocará en el controlador. Su uso en el modelo se vería así: '$ this-> id = $ id; $ this-> saveField ('is_featured', true); '. – Hippie

+0

Hola, quiero saber ¿cuándo la tabla no tiene un campo de identificación y cómo guardarla? no es id use pid en mi tabla. ** $ this-> Event-> pid = $ id ** no está bien? cómo verificar mi condición. –

10

Puede realizar la actualización en un campo de dos maneras:

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

O

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

en la segunda e jemplo, primera matriz se actualizará el valor en el campo definido y segunda matriz define el "WHERE" condición

método
+2

-1 Hay más de 2 formas de guardar un campo. Los dos más obvios son [saveField] (http://book.cakephp.org/2.0/en/models/saving-your-data.html # model-savefield-string-fieldname-string-fieldvalue-validate-false) y [save] (http://book.cakephp.org/2.0/en/models/saving-your-data.html#model- save-array-data-null-boolean-validate-true-array-fieldlist-array). updateAll no es una buena idea si no es necesario, y según lo escrito producirá un error sql ya que [los campos se tratan como expresiones sql] (http://book.cakephp.org/2.0/en/models/saving-your-data .html # model-updateall-array-fields-array-condiciones). – AD7six

11

También puede usar el set()

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

Se puede utilizar esta técnica para actualizar el campo (s)

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

Si no desea que el campo modificado para actualizarse automáticamente al guardar algunos datos se suman 'modified' => false a la matriz de datos de $ Si usted no pasa el ello, el modelo no puede establecer su clave primaria y "agregará" en lugar de "e" dit”el campo (s)

+0

En mi opinión, este es el método más seguro cuando necesita actualizar más de un campo. Si solo se va a actualizar un campo, usaría 'saveField'. – marcocamejo

3

en CakePHP 3 para actualizar sus datos:

  1. incluir en su controlador:

    use Cake\ORM\TableRegistry;

  2. En su acción:

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

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

0

extraño; A veces me gusta recurrir al viejo sql llanura: una sola línea + ninguna sobrecarga allí, me hace que no haya devoluciones de llamada/eventos se involucran

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

Puede hacerlo fácil (cuidado con esto puede no ser lo que usted quiere!) modo

$this->Event->saveField('username', $user); //Where username is Model field name and $user is value 
Cuestiones relacionadas