2016-03-31 27 views
0

"View"という名前のエンティティがあり、このエンティティには "datetime"という名前の属性があります(エンティティとフィールドの名前は関係ありません)。CakePHP 3エンティティのデフォルトフィールド値

データベースに定義するのではなく、CakePHPの内部にデフォルト値を設定したいと思います。私は定義された私のエンティティクラスで

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(); 
    } 
} 

そして、私はモデルのテーブルクラス(ViewTable)の方法でそれを保存しよう:

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

何も、私の「日時」が起こりませんフィールドは「0000-00-00 00:00:00」として保存されます。

私の質問は、$this->newEntity()というフィールドにこのデフォルト値が設定されているため、エンティティのデフォルト値を設定するにはどうすればいいですか?

答えて

3

私はそれが必要なのはいつでもコードを使用することを行動でそれを行うだろうViewsTable::beforeSave

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

でそれを行うだろう。 –

+0

オブジェクト作成時にデフォルト値が設定されているのは面白いでしょうか?ビジネスロジック中にそれを処理する必要があるかもしれません。 –

+0

だから、 'View :: __ construct()'メソッドで属性を単純に初期化することができます。私はすぐにテストをしましたが、うまくいくようです。私はケーキがいつ、どのようにコンストラクタを呼び出すのかわかりませんし、それがエンティティに何らかの操作を行った場合、それが安全な方法かどうかわかりません。 – arilia

関連する問題