2016-07-21 5 views
0

aktualisieren Ich versuche, nur ein Stück Informationen von einem Benutzer in der Datenbank gespeichert zu aktualisieren, und CakePHP akzeptiert ein Array von Werten für jedes Attribut, aber ich don Es gibt keine Werte für andere Attribute und CakePhp aktualisiert die Zeile nicht, da alle Werte in der Zeile erwartet werden.wie ein einzelnes Attribut eines Elements in einer Tabelle mit CakePHP

+0

zeigen uns den Code – depperm

+0

einen Code zeigen und welche Fehlermeldungen Sie bekommen –

+0

Danke meine Frage zur Bearbeitung! – djrtb

Antwort

0

Ersten Weg: Erstellen Sie neue eine Objektabfrage mit query():

 $users = TableRegistry::get('Users'); 
     $query = $users->query(); 
     $query->update() 
     ->set(['is_active' => true]) 
     ->where(['id' => $id]) 
     ->execute(); 

http://book.cakephp.org/3.0/en/orm/query-builder.html


Zweiter Weg: Mit PatchEntity


die Feldliste() Option beim Erstellen oder Daten zu einer Einheit verschmelzen:

dies Ihnen nur Updates erlauben oder Einsatz Feld u wollen

  $user = $this->Users->get($id); 
     if ($this->request->is(['post', 'put'])) { 

      //assume $this->request->data Contains field as ['name' => 'myname', 'title' => 'Hacked!']; 

      $user = $this->Users->patchEntity($user, $this->request->data, [ 
        'fieldList' => ['title']]); 
      // Only allow title to be changed 

      if ($this->Users->save($user)) { 
       $this->Flash->success(__('Your user has been updated.')); 
       return $this->redirect(['action' => 'index']); 
      } 
      $this->Flash->error(__('Unable to update your user.')); 
     } 

http://book.cakephp.org/3.0/en/orm/saving-data.html#changing-accessible-fields

http://book.cakephp.org/3.0/en/orm/query-builder.html#updating-data

0

Um ein einzelnes Attribut in Ihrem Modell zu aktualisieren, verwenden Sie die set-Methode und übergeben Sie nur die Felder, die Sie aktualisieren. Zum Beispiel können Sie so etwas versuchen.

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

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

0

arbeiten Sollte

$this->ModelName->id = $id; 
$this->ModelName->saveField('fieldname', 'New Value'); 
0

Wenn Sie cakephp 2.x verwenden, so dass Sie

$this->ModelName->id = $id; 
$this->ModelName->saveField('fieldName', 'new value'); 

verwenden Wenn Sie cakephp 3.x verwenden, so dass Sie

verwenden
$model = $this->ModelName->get($id); 
$model = $this->ModelName->patchEntity($model,['fieldName'=>'new value']) 
$this->ModelName->save($model); 

ODER

$model = $this->ModelName->get($id); 
$model->fieldName = 'new value'; 
$this->ModelName->save($model); 

Weitere Informationen finden Sie http://book.cakephp.org/3.0/en/orm/saving-data.html#updating-data

+0

"$ model = $ this-> ModelName-> patchEntity ($ model, ['fieldName' => 'neuer Wert'])" hat funktioniert, aber Sie müssen den neuen Wert explizit dem Feld zuweisen. Dies kann nicht auf den Wert von der Ansicht zugreifen. "$ user = $ this-> Benutzer-> patchEntity ($ user, $ this-> request-> data, [ 'fieldList' => ['title']]); // Nur erlauben Titel zu sein geändert "von @pradeep hat gut funktioniert, und dynamisch. – djrtb

Verwandte Themen