2010-09-01 9 views
31

Ich möchte eine Funktion, um ein Feld "is_featured" zu 1 (wahr) des Ereignismodells der angegebenen ID zu ändern, um ein Ereignis als "Featured" zu markieren.Wie aktualisiere ich 1 Feld in CakePHP?

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

Antwort

68

Sie saveField verwenden können, um dieses zum Beispiel zu tun

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

Gehört die saveField-Funktion in die Controller- oder Modellklasse? – gkalikapersaud

+2

@ user2128444 Es ist eine Modellfunktion, aber Sie können es in Ihrem Controller und Modell verwenden. Das Beispiel in der Antwort würde in der Steuerung platziert werden. Die Verwendung im Modell würde folgendermaßen aussehen: $ this- id = $ id; $ this-> saveField ('is_featured', true); '. – Hippie

+0

Hallo, ich möchte wissen, wenn Tabelle kein ID-Feld haben und wie zu speichern? Ich benutze es nicht in meiner Tabelle. ** $ this-> Event-> pid = $ id ** ist nicht ok? Wie überprüfe ich meinen Zustand? –

10

Sie Update in einem Feld von zwei Arten durchführen können:

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

ODER

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

im zweiten e xample, erste Array wird den Wert im definierten Feld und zweiten Feld aktualisieren, definiert die Bedingung „WHERE“

+2

-1 Es gibt mehr als zwei Möglichkeiten, ein Feld zu speichern. Die zwei offensichtlichsten sind [saveField] (http://book.cakephp.org/2.0/en/models/saving-your-data.html # model-savefield-string-feldname-zeichenfolge-fieldvalue-validate-false) und [speichern] (http://book.cakephp.org/2.0/en/models/saving-your-data.html#model- save-array-data-null-boolesch-validate-true-array-fieldlist-array). updateAll ist keine gute Idee, wenn es nicht notwendig ist, und wie geschrieben wird einen SQL-Fehler erzeugen wie [Felder werden als SQL-Ausdrücke behandelt] (http://book.cakephp.org/2.0/en/models/saving-your-data .html # model-updateall-array-fields-array-conditions). – AD7six

11

Sie können auch Satz verwenden() Methode

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

Sie können diese Technik verwenden, um das Feld zu aktualisieren (s)

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

Wenn Sie das geänderte Feld automatisch aktualisiert werden nicht wollen, wenn einige Daten hinzufügen 'modified' => false auf Ihre $ data Array Speichern Wenn Sie nicht die ID übergeben, kann das Modell nicht seine Primärschlüssel festgelegt und wird "hinzufügen" anstelle von "e dit“der Bereich (e)

+0

Meiner Meinung nach ist dies die sicherste Methode, wenn Sie mehr als ein Feld aktualisieren müssen. Wenn nur ein Feld aktualisiert werden soll, würde ich 'saveField' verwenden. – marcocamejo

3

In cakephp 3 Ihre Daten zu aktualisieren:

  1. in dem Controller umfassen:

    use Cake\ORM\TableRegistry;

  2. In Ihrer Aktion:

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

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

0

seltsam; Manchmal mag ich für einfache alte SQL greifen: one-liner + kein Overhead gibt, macht mich sicher, dass keine Rückrufe/Ereignisse einmischen

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

Sie diese einfach tun können (Vorsicht dies nicht sein kann, was Sie wollen!) Weg

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