【问题标题】:CakePHP 3 Entity default field valueCakePHP 3 实体默认字段值
【发布时间】:2016-03-31 04:17:12
【问题描述】:

我有一个名为“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)的方法中时:

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

什么也没发生,我的“日期时间”字段保存为“0000-00-00 00:00:00”。

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

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    我会在 ViewsTable::beforeSave 中进行操作

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

    【讨论】:

    • 我会在需要时使用代码。
    • 在创建对象时设置默认值不是更有趣吗?您可能需要在业务逻辑期间处理它。
    • 所以我想你可以简单地在View::__construct() 方法中初始化你的属性。我做了一个快速测试,它似乎工作。我不确定 cake 调用构造函数的方式和时间,以及之后它是否对实体执行某种操作,所以我不确定这是否是一种安全的方法。
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2012-04-07
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多