Posted by ba stey
Cover Image

(Copyright des Bildes siehe Credits)

Gestern Abend habe ich etwas an einem Code herumgespielt. Ich habe ein neues Model erstellt - natürlich mit Table und Entity Datei. Als ich dann aber Daten in der Datenbank verändern bzw. updaten wollte, funktioniert es nicht. Die Suche hat mich verrückt werden lassen.

Das Problem war, das patchEntity keine Veränderung herbeifühte:

<?php
var_dump($data); 
$DataTable->patchEntity($data, ['active' => 2]);
var_dump($data);

erzeugte folgende Ausgabe:

object(Cake\ORM\Entity)[365]  
  public 'user_role_name' => string 'ADMIN' (length=5)
  public 'active' => int 1

object(Cake\ORM\Entity)[365]  
  public 'user_role_name' => string 'ADMIN' (length=5)
  public 'active' => int 1

Dabei war der Fehler so lächerlich simpel: Ich habe einfach aus alter Gewohnheit im Plural gearbeitet.

CakePHP hat bis in die 2er Version aus gewissen Model-Namen die Mehrzahl erzeugt. So wurde aus User Users und Member Members. Im Grunde ist die Idee korrekt, da das Model ja eine Datenbanktabelle beschreibt und in dieser viele Objekte (Entities) gespeichert werden. Demnach sollte der Entwickler die Tabelle auch users und nicht user nennen.

CakePHP zwang in Versionen vor 3.0 die Nutzer zu der Konvention der Bezeichnung. Mit der Version 3.0, die auch viele weitere Vorteile bringt, ist dieser Zwang weggefallen. Die Konventionen die CakePHP noch nutzt, sind auf der Übersicht CakePHP Contentions aufgelistet und eigentlich intuitiv.

Wenn also patchEntity nicht funktioniert, einfach mal die Namen der Tabelle bzw. des Entities (wobei hier weniger das Problem liegen dürfte) überprüfen, ob diese mit dem Tabellennamen in der Datenbank übereinstimmen.

Update

Natürlich sollten die Felder auch nicht durch $_accessible in der Entity gesperrt werden. Nur so als kleiner Hinweis am Rande ;)

Credits

Beitragsbild von Free-Photos Pixabay. CC0 Creative Commons: Freie kommerzielle Nutzung, kein Bildnachweis nötig