自动变更getAttributeValue上的所有日期

时间:2017-04-26 17:43:02

标签: php laravel

我正在尝试为从数据库中检索的任何日期字符串创建一种全局变更器。

现在这可能是错误的解决方法(甚至不起作用),但我创建了一个名为App\Http\Mutators\ModelMutator的类,它扩展了Eloquent\Model

然后我更改了Eloquent中的app.php别名,指向这个新类。

以下是新课程的代码:

<?php

namespace App\Http\Mutators;

use Illuminate\Database\Eloquent\Model;

class ModelMutator extends Model
{
    function getAttributeValue($key)
    {
        $value = parent::getAttributeValue($key);

        if (strtotime($value)) {
            $value = tolocal($value);
        }

        return $value;
    }
}

这根本不起作用。实际上,只要从数据库中检索到某些内容,它就会被调用。

我只想从数据库中检索任何日期字符串以应用tolocal函数。

我最大的问题是我使用的是App\命名空间之外的包,并且不想编写mutator并修改每个包extends Model类。

1 个答案:

答案 0 :(得分:0)

Eloquent已经拥有此功能。使用$dates属性:

protected $dates = [
    'created_at',
    'updated_at',
    'deleted_at'
];
  

默认情况下,Eloquent会将created_at和updated_at列转换为Carbon实例,它扩展了PHP DateTime类以提供各种有用的方法。您可以通过覆盖模型的$ dates属性来自定义哪些日期会自动变异,甚至完全禁用此变异

https://laravel.com/docs/5.4/eloquent-mutators#date-mutators