Laravel 5:在DB中设置或获取日期格式

时间:2017-04-24 12:45:36

标签: php laravel date laravel-5 php-carbon

我有麻烦了解Laravel如何处理日期和Carbon。我有一个模型,它有一个名为published_at的特殊字段(It' s da DATE字段)。当我保存对象的实例时,我希望laravel使用碳转换该字段。

这是我的模特:

<?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);
}

// ....
}

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

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

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

顺便说一句:我对created_atupdated_at也喜欢同样的事情。我做错了什么想法?

Laravel版本:5.3.31

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

好吧,经过进一步的挖掘,我做到了这一点:

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);)。