Laravel 5: 设置或获取数据库中的日期格式

Laravel 5: Set or get date format in DB

我无法理解 Laravel 如何处理日期和 Carbon。我有一个模型,它有一个名为 published_at 的特殊字段(它是 DATE 字段)。当我将实例保存为对象时,我希望 laravel 使用 carbon 转换该字段。

这是我的模型:

<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;


class Addon extends Model
{

// ...

protected $dates = [

    'published_at'
];

// ....

/**
 * Set the published_at date format
 *
 * @param $date
 * @return string
 */
public function setPublishedAtAttribute($date)
{
    $this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date);
}

// ....
}

因此,根据我的理解,published_at 字段现在应该使用 d/m/Y 格式保存为 carbon 的实例。但是它在数据库中保存为 mm-dd-yyyy。

最后,我不关心它是如何保存到数据库中的,所以这就是为什么我想创建一个 getPublishedAtAttribute 并以我想要的格式检索它。那也没用。

我只想Laravel格式化它d/m/Y。每当我展示它时,我都不必做类似 {{ $addon->published_at->format('d/m/Y') }} 的事情。

顺便说一句:我想要 created_atupdated_at 同样的东西。知道我做错了什么吗?

Laravel版本:5.3.31

我建议你不要乱用这样的日期格式,而是创建一个这样的访问器..

public function getFormattedPublishedAtAttribute() {
    return $this->published_at->format('d/m/Y');
}

这样,您可以使用默认日期,也可以使用..

单独获取格式化日期
$model->formattedPublishedAt;

您必须在 Carbon 指令中设置格式日期:

$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date)->format('Y-m-d');

好吧,在进一步挖掘之后,我这样做了:

public function getPublishedAtAttribute($date)
{
    $date = new Carbon($date);
    return $date->format('d/m/Y');
}

这是有效的。但是我不明白为什么我必须做 $date = new Carbon($date); 才能让它发挥作用。如果我省略它,我会得到 Call to a member function format() on string。 (尝试使用 published_atcreated_atupdated_at,都一样)。

但是因为 published_at 在我的 $dates = []; 数组中,它不应该被自动视为碳实例吗? created_atupdated_at?

更是如此

但据我所知,事实并非如此。如果我 dd($addon->created_at); 它只是一个字符串,而不是碳实例(如果我省略了 $date = new Carbon($date);)。