CakePHP 3实体默认字段值

CakePHP 3实体默认字段值,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我有一个名为“View”的实体,这个实体有一个名为“datetime”的属性(实体名称和字段不相关) 我想在CakePHP中为它设置一个默认值,而不是在数据库中定义它 在我定义的实体类上: namespace App\Model\Entity; use Cake\ORM\Entity; use Cake\I18n\Time; class View extends Entity { protected $_accessible = [ '*' => true,

我有一个名为“View”的实体,这个实体有一个名为“datetime”的属性(实体名称和字段不相关)

我想在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)的方法中时:

没有发生任何情况,我的“日期时间”字段保存为“0000-00-00:00:00”


我的问题是:如何设置实体的默认值,以便在调用
$this->newEntity()
字段时附带此默认值?

我会在
ViewsTable::beforeSave

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

我会在
ViewsTable::beforeSave

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

我会在需要的时候使用代码,如果默认值是在对象创建时设置的,这不是更有趣吗?您可能需要在业务逻辑期间处理它。因此,我想您只需在
视图::\uu construct()
方法中初始化属性即可。我做了一个快速测试,它似乎工作。我不确定cake如何以及何时调用构造函数,以及它是否在调用构造函数之后对实体执行某种操作,因此我不确定这是否是一种安全的方法。我会在需要时使用代码。如果在创建对象时设置默认值,会不会更有趣?您可能需要在业务逻辑期间处理它。因此,我想您只需在
视图::\uu construct()
方法中初始化属性即可。我做了一个快速测试,它似乎工作。我不确定cake如何以及何时调用构造函数,以及在调用之后是否对实体执行某种操作,因此我不确定这样做是否安全。