2016-03-31 10 views
0

Ich habe eine Entität namens "View" und diese Entität hat ein Attribut namens "datetime" (der Name der Entität und Feld sind nicht relevant).CakePHP 3 Entity Standardwert Feld Wert

Ich möchte in CakePHP einen Standardwert festlegen, anstatt es in der Datenbank zu definieren.

Auf meiner Entity-Klasse I definiert:

namespace App\Model\Entity; 
use Cake\ORM\Entity; 
use Cake\I18n\Time; 

class View extends Entity 
{ 

    protected $_accessible = [ 
     '*' => true, 
     'id' => false, 
    ]; 

    protected function _getDatetime($datetime) 
    { 
     return Time::now(); 
    } 
} 

Und wenn ich versuche, es in einem Verfahren der Modelltabellenklasse zu speichern (ViewTable):

public function registerView(User $user){ 
    $view = $this->newEntity(); 
    $view->user = $user; 
    $this->save($view); 
} 

Es passiert nichts, meinen "Datetime" Das Feld wird als '0000-00-00 00:00:00' gespeichert.

Meine Frage ist: Wie kann ich einen Standardwert für eine Entität so festlegen, wenn ich $this->newEntity() aufrufen, kommt das Feld mit diesem Standardwert?

Antwort

3

ich es tun würde in ViewsTable::beforeSave

beforeSave($event, $entity, $options) 
{ 
    if(!$entity->isNew() && !$entity->datetime) 
    { 
     $entity->datetime = Time::now(); 
    } 
    return true; 
} 
+0

ich es mit einem Verhalten tun würde, um den Code zu verwenden, wenn sie gebraucht wird. –

+0

Wäre es nicht interessanter, wenn der Standardwert zum Zeitpunkt der Objekterstellung festgelegt wird? Möglicherweise müssen Sie während der Geschäftslogik damit umgehen. –

+0

Ich denke, Sie können Ihr Attribut einfach in der 'View :: __ construct()' Methode initialisieren. Ich habe einen schnellen Test gemacht und es scheint zu funktionieren. Ich bin mir nicht sicher, wie und wann der Kuchen den Konstruktor aufruft und ob er danach irgendeine Art von Manipulation an der Entität durchführt, also bin ich mir nicht sicher, ob es ein sicherer Weg ist, dies zu tun. – arilia