2016-03-31 3 views
0

У меня есть объект с именем «Вид», и этот объект имеет атрибут с именем «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); 
} 

Ничего не происходит, мой "DateTime" поле сохраняется как '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

Смежные вопросы