提问人:Surya Neupane 提问时间:6/20/2023 更新时间:6/20/2023 访问量:87
Laravel日期演员表
Laravel date cast
问:
您好,我想使用 Laravel 默认投射功能,如果我访问后模型created_at属性。我希望从以下代码中获得以下输出:
法典:
$timepassed = $post->created_at;
期望输出:
2 hours ago
laravel 文档仅提供了日期的强制转换示例,即:
protected $casts = [
'created_at' => 'datetime:Y-m-d',
];
所以当我访问$post->created_at时,上面的演员表会输出“2023-06-20”。
我的问题是我应该用什么代替“datetime:Y-m-d”来获得输出,例如:“2小时前”
答:
2赞
linktoahref
6/20/2023
#1
一种方法是使用访问器而不是使用强制转换。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* Get the created at value.
*
* @param Carbon $value
* @return string
*/
public function getCreatedAtAttribute($value)
{
return $value->diffForHumans();
}
}
2赞
Karl Hill
6/20/2023
#2
使用 Carbon 库。
composer require nesbot/carbon
型
use Illuminate\Support\Carbon;
class Post extends Model
{
// ...
public function getCreatedAtAttribute($value)
{
return Carbon::parse($value)->diffForHumans();
}
}
0赞
Shoukat Mirza
6/20/2023
#3
要获得所需的输出,您可以在后期模型上指定属性转换。create_at
确保在Laravel项目中安装了Carbon库。您可以通过运行以下命令来安装它:
composer require nesbot/carbon
帖子模型上的属性强制转换:
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $casts = [
'created_at' => 'datetime',
];
}
定义此强制转换后,访问该属性将返回 Carbon 实例,从而允许您根据需要对其进行格式化。要获取“2 小时前”格式,您可以使用 Carbon 提供的方法。created_at
diffForHumans()
例:
$post = Post::find(1);
$post->created_at->diffForHumans();
评论