我正在努力使用Laravel日期格式,并将其与PgSQL一起使用。
我的需要:
Y-m-d\TH:i:s\Z
(例如:2016-05-13T10:05:00Z)Y-m-d H:i:s
格式存储(例如:2016-05-13 10:05:00)困难的部分是将Laravel配置为全局接受输入和输出中的特定日期格式,但不更改“内部”格式。
可以覆盖属性以自定义格式,但它可以全局操作:
protected $dateFormat = 'Y-m-d\TH:i:s\Z';
从数据库中检索日期时会导致错误(尝试使用自定义掩码转换PgSQL日期:InvalidArgumentException
)。
我想避免使用中间件或在每个控制器响应中手动执行,有什么办法吗?
答案 0 :(得分:1)
听起来你想使用访问器和mutator。这是一个具有my_date
列的类的基本示例,转换可能不完全正确(我只是假设strtotime()
将起作用)但这应该很容易修复。
class SomeModel extends Model
{
// triggered whenever you retrieve the date from the db
public function getMyDateAttribute($value)
{
return date('Y-m-d\TH:i:s\Z', strtotime($value));
}
// triggered whenever you insert the date into the db
public function setMyDateAttribute($value)
{
$this->attributes['my_date'] = date('Y-m-d H:i:s', strtotime($value));
}
}
现在,您的数据库可以使用一种日期时间格式,而应用程序的其他部分可以使用另一种。如果您希望它可以重复用于其他模型,只要列的名称相同,就可以将其提取到特征。