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

Php Laravel 5:设置或获取数据库中的日期格式,php,laravel,date,laravel-5,php-carbon,Php,Laravel,Date,Laravel 5,Php Carbon,我很难理解Laravel是如何处理日期和碳的。我有一个模型,它有一个名为published_at的特殊字段(它是da DATE字段)。我希望在保存对象的实例时,laravel使用碳元素转换该字段 这是我的模型: <?php namespace App; use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; class Addon extends Model { // ... protected $dates = [

我很难理解Laravel是如何处理日期和碳的。我有一个模型,它有一个名为published_at的特殊字段(它是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);
}

// ....
}

我建议您不要乱搞这样的日期格式,而是创建这样的访问器

public function getFormattedPublishedAtAttribute() {
    return $this->published_at->format('d/m/Y');
}
这样,您可以使用默认日期,也可以使用..单独获取格式化日期

$model->formattedPublishedAt;

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

$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)以使其正常工作。如果不使用它,则会调用字符串上的成员函数format()
。(在上使用
发布、在
上使用
创建和在
上使用
更新进行了尝试,所有这些都是一样的)

但是由于
上发布的是我的$dates=[]数组,难道不应该自动将其视为碳实例吗?在处创建的
和在
处更新的
更是如此


但就我所知,它不是。如果我
dd($addon->created_at)它只是一个字符串,而不是一个carbon实例(如果我省略了
$date=newcarbon($date);

MySQL以“YYYY-MM-DD”格式检索并显示日期值。您可以在模型中创建一个getter,该getter返回您希望在视图中显示的格式的值?公共函数GetPublisheDataAttribute($date){return$date->format('d/m/Y');}因为对我来说,当你在
$model->PublishedU上执行时,我会在字符串上调用成员函数format()
,Laravel会检查是否有
GetPublisheDataAttribute()
方法,如果有,则传递值。但是由于我们使用的是不同的名称,Laravel不知道我们需要哪个属性,这就是为什么我们必须使用
return$this->published\u at->format()
指定它的原因。对不起,我错了。这是一个碳排放的例子。我仍然不明白为什么我必须在访问器中新建一个carbon实例,你不需要创建carbon实例。默认情况下,在创建的
和在
更新的
的Laravel中的日期是碳实例。如果您使用的是软删除,您意识到需要创建一个
protected$dates=['deleted_at']这是为了在
处为
deleted\u创建一个碳实例。