在 Eloquent 个结果中获取格式化日期

Get formatted date at Eloquent results

考虑到模型是

class Cota extends Model
{
    protected $fillable = ['status','user_id','produto_id','numero','arquivo','updated_at'];

    protected $dates = [
        'updated_at',
    ];

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

并考虑查询:

$cotas = DB::table('cotas')->join('produtos','produtos.id','=','cotas.produto_id')->join('users','users.id','=','cotas.user_id')->select('cotas.id','produtos.titulo as produto','cotas.numero','cotas.arquivo','users.name','cotas.status','cotas.updated_at','produtos.valor')->get();

当我只得到一个实例时,例如:

$cota = Cota::find(6517);

我能做到:

$cota->updated_at->format('d/m/Y');

但在上面的查询中,结果始终使用 Mysql 使用的传统日期格式。 如何获得 ('d/m/Y') 格式的结果?我必须使用原始查询吗?那是唯一的方法吗? 谢谢!

您始终可以在 Select 语句中使用 DB::raw。

$cotas = DB::table('cotas')
    ->join('produtos','produtos.id','=','cotas.produto_id')
    ->join('users','users.id','=','cotas.user_id')
    ->select([
        'cotas.id',
        'produtos.titulo as produto',
        'cotas.numero',
        'cotas.arquivo',
        'users.name',
        'cotas.status', 
        DB::raw('DATE_FORMAT(cotas.updated_at, "%d/%m/%Y"') as updated_at,
        'produtos.valor'
    ])
    ->get();

// Or Else You can always loop over your collection when displaying data / using that data.

您可以像这样使用日期转换

protected $casts = [
    'updated_at' => 'datetime:d/m/Y',
];

这仅在模型序列化为数组或根据docsJSON时有用。