CAKEPHP 3 在数据库中保存成功关闭日期后不为空,它具有今天的值

CAKEPHP 3 after save success close date in database is not null, it has todays value

我有输入框

echo $this->Form->input('close_date',['empty' => true, 'default' => '']);

有验证规则..

 $validator->add('close_date', 'valid', ['rule' => 'date'])->allowEmpty('close_date');

之前 $this->request->data 的输出:

$ticket = $this->Tickets->patchEntity($ticket, $this->request->data);

['close_date' => [
        'day' => '',
        'month' => '',
        'year' => ''
    ]]

但在数据库中保存成功后关闭日期不为空,它具有今天的值....

in MySql table 字段 close_date 类型为 DATE 默认 NULL

我在这里遗漏了什么...我希望此字段继续为 NULL 为什么蛋糕保存在今天的日期?

AFAICT 日期时间类型还不能将空日期数组结构编组为空值。您可能想通过 at github 报告此问题,可能值得在核心中添加对此的支持。

作为(临时)解决方法,您可以使用 the Model.beforeMarshal event/callback 并手动将 属性 设置为 null,以防日期数组为空,例如:

public function beforeMarshal(Event $event, \ArrayObject $data, \ArrayObject $options)
{
    if (
        isset($data['close_date']) &&
        is_array($data['close_date']) &&
        !array_filter($data['close_date'])
    ) {
        $data['close_date'] = null;
    }
}