Laravel 5.5:对于所有雄辩的模型,都有像全局变量之类的东西吗?

时间:2019-06-19 05:16:07

标签: php laravel

我所有的模型都扩展了Illuminate\Database\Eloquent\Model。我想要实现的是每个模型都以特定的日期格式显示created_atupdated_atdeleted_at,或者在我检索/获取时未设置日期的情况下保留为null来自DB的数据(即时)。

我可以使用mutator并定义public function setCreatedAtAttribute(),检查value是否为Carbon日期,然后调用所需的->format(),但是我必须在每个日期列的每个模型上执行此操作(定义此方法)

另一方面,父母Model生活在vendor之内,因此我无法对其进行修改。有没有一种方法可以全局定义它并将其应用于我的所有模型?

PS。我的问题不是关于修改:

/**
 * The storage format of the model's date columns.
 *
 * @var string
 */
protected $dateFormat;

作为(如果我理解正确),这负责在数据库中存储数据时设置日期格式。我想保持原样。 因此在数据库级别上没有任何更改。我想即时获取新的日期格式。

1 个答案:

答案 0 :(得分:1)

您可以创建一个trait并在模型中使用它:

trait DatesTrait
{
    /**
     * Mutator for created_at
     */
    public function getCreatedAtAttribute($value)
    {
        return $this->formatDatetime($value);
    }

    /**
     * Mutator for updated_at
     */
    public function getUpdatedAtAttribute($value)
    {
        return $this->formatDatetime($value);
    }

    /**
     * Replace this with any formatting logic that suits your needs
     */
    protected function formatDatetime($value)
    {
        if (is_null($value)) {
            return $value;
        }

        if (is_string($value)) {
            $value = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $value);
        }

        return $value->format('Y-m-d H:i:s');
    }
}

然后在每个模型中

class ModelX
{
    use DatesTrait;
}