Laravel:如何设置模型属性转换的日期格式?

aelbi1ox  于 2023-03-04  发布在  其他
关注(0)|答案(8)|浏览(394)

我的模型是:

protected $casts = [
    'date' => 'date',
];

laravel是否有设置演员格式的能力,比如:

protected $casts = [
    'date' => 'date_format:d/m/yyyy',
];


编辑
我试过这个:
模型中:

protected $dateFormat = 'm/d/Y';

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

protected $casts = [
    'driver_expiration'     => 'date',
];

我将日期(driver_expiration)保存为"01/012016",但日期保存为0000 - 00 - 00。
laravel文件:https://laravel.com/docs/5.1/eloquent-mutators告诉我们$dateFormat仅适用于时间戳("创建时间"、"更新时间"、"删除时间")

nkoocmlb

nkoocmlb1#

在拉拉威尔5.6之后,
您可以单独自定义Eloquent日期和日期时间转换的格式:

protected $casts = [
    'birthday'  => 'date:Y-m-d',
    'joined_at' => 'datetime:Y-m-d H:00',
];

将模型序列化为数组或JSON数据时使用此格式

ha5z0ras

ha5z0ras2#

除了强制转换日期格式,您还可以使用mutators设置您喜欢的格式:
例如,如果列名为date,则可以将以下函数添加到模型中:

public function setDateAttribute( $value ) {
  $this->attributes['date'] = (new Carbon($value))->format('d/m/y');
}

setDateAttribute的格式始终为set[ColumnName]Attribute(使用CamelCase)。$this->attributes['date']部分中的date还必须与表中的实际列名匹配。
当您createupdate数据库中的记录时,格式将由上述函数自动更改。
备注:您可能需要将use Carbon\Carbon语句添加到模型顶部,才能使用碳库。
Take a look at other examples here.

    • 更新**

或者,可以使用以下命令定义date列的格式:

protected $dateFormat = 'Y-m-d';
6bc51xsx

6bc51xsx3#

只需添加到模型中:

protected function asDateTime($value)
{
    return parent::asDateTime($value)->format('d/m/y');
}

Eloquent方法最初返回一个Carbon示例,因此您可以获取该示例并调用其format()方法。如果您希望将此解决方案应用于所有模型,只需创建一个从Eloquent扩展的新类,并将此方法放在那里,然后您就可以从这个新类扩展模型。

js4nwp54

js4nwp544#

我创建新的模型属性:

protected $datesConvert = ['driver_expiration'];

然后我更新了我的基本模型,如下所示:

public function save(array $options = [])
{
    if(isset($this->datesConvert)){
        foreach($this->datesConvert as $date){
            $this->attributes[$date] = \Carbon\Carbon::createFromFormat('d/m/Y', $this->attributes[$date])->format('Y-m-d');
        }
    }

    parent::save($options);

}

public function getAttribute($key)
{
    $value = parent::getAttribute($key);

    if(isset($this->attributes[$key])){
        if(isset($this->datesConvert)  &&  in_array($key, $this->datesConvert)){
            $value = \Carbon\Carbon::createFromFormat('Y-m-d', $value)->format('d/m/Y');
        }

    }

    return $value;
}

这个解决方案对我很有效。代码可以移到trait中。格式可以放在$datesConvert Format = 'd/m/Y';

kse8i1jr

kse8i1jr5#

对于我来说,我只是把下面的代码放在我的Model中,它将格式化所有日期

protected function serializeDate($date)
{
    return $date->format('Y-m-d H:i:s');
}
6g8kf2rb

6g8kf2rb6#

类型转换不受Collection对象的影响。它用于json和数组格式。如果你需要一个单独的类型转换,你可以使用

$user->date->format('m-d-Y');
91zkwejq

91zkwejq7#

试试这个:

//Note: Add this Carbon library at the top of your Model. 
use Carbon\Carbon
    
public function getDateAttribute($date)
        {
            return $this->attributes['date'] = Carbon::parse($date)->format('d/m/Y');
        }
h5qlskok

h5qlskok8#

拉腊维尔10.x
模型中

use Illuminate\Database\Eloquent\Casts\Attribute;

protected function createdAt(): Attribute
{
    return Attribute::make(
        get: fn ($value, $attributes) => Carbon::create($value)->format(m/d/Y")
    );
}

相关问题