PHP数据库表模型的DateTime属性如何兼容NULL值?
解决PHP模型类DateTime字段支持NULL的问题
有两种常用方法可以实现保留DateTime类型声明同时支持NULL值:
使用可空类型声明(PHP 7.1+)
这是最简单直接的方案,在类型声明前加上?符号,明确表示该属性可以是指定类型或者NULL:class GuestList extends DatabaseModel { protected static $table = 'GuestLists'; public $ID; public $EventName; public ?\DateTime $EventDateTime; }这个语法从PHP 7.1开始支持,能让PHP接受
$EventDateTime为\DateTime对象或者null,完美适配数据库里的NULL值。手动处理字段赋值(兼容旧版PHP)
如果你还在使用PHP 7.1以下的版本,没法用可空类型,可以在模型的属性赋值逻辑里做判断:
比如在从数据库加载数据时,或者给EventDateTime赋值的方法里,手动处理NULL情况:class GuestList extends DatabaseModel { protected static $table = 'GuestLists'; public $ID; public $EventName; protected $EventDateTime; public function getEventDateTime(): ?\DateTime { return $this->EventDateTime; } public function setEventDateTime($value) { $this->EventDateTime = $value === null ? null : new \DateTime($value); } // 或者在模型的初始化/数据加载方法里处理 protected function loadFromDatabase($data) { parent::loadFromDatabase($data); $this->setEventDateTime($data['EventDateTime']); } }这样既能保证
$EventDateTime只有\DateTime对象或者NULL两种可能,也兼容了数据库里的NULL值。
另外要注意:确保你的数据库驱动在读取NULL字段时返回的是PHP原生的null,而不是空字符串或者其他占位值,否则可能会出现类型转换错误。
内容的提问来源于stack exchange,提问作者Bashabi
相关产品推荐
相关产品推荐

