Fabiano
Fabiano

Reputation: 65

Get formatted date at Eloquent results

Considering that the model is

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

    protected $dates = [
        'updated_at',
    ];

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

And considering the query:

$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();

When I get only one instance, like:

$cota = Cota::find(6517);

I can do this:

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

But in the query above, the results come always with the traditionl date format used by Mysql. How do I get the results with the ('d/m/Y') format? I have to use a raw query? Is that the only way? Thanks!

Upvotes: 1

Views: 1522

Answers (2)

jewishmoses
jewishmoses

Reputation: 1138

You can use date casting like so

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

This is only useful when the model is serialized to an array or JSON according to the docs.

Upvotes: 1

Rutvij Kothari
Rutvij Kothari

Reputation: 1285

You can always user DB::raw in Select statement.

$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.

Upvotes: 1

Related Questions