Me enfrenté, en mi primer proyecto Laravel, a mi primera gran duda, es que en este proyecto una oferta laboral debía durar 30 días. Lo primero que pensé fue en hacer un campo, en la tabla, que se llamara expirated_at (y lo hice así en la primera versión).
Pero me quedó dando vueltas en la cabeza, para que ocupar espacio en un campo que podía ser visto de otra forma. Y busqué en la web, se que esto puede parecer error de colegio, pero de alguna forma hay que aprender.
Resultado fue que descubrí los accesors y acá voy a explicar con este mismo ejemplo como funcionan.
Los accesors se definen en los modelos, en mi ejemplo el modelo se llamaba Offer.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Offer extends Model
{
/**
* Get the user's first name.
*
* @param string $value
* @return string
*/
public function getExpiratedAtAttribute()
{
$created = $this->attributes['created_at'];
$exp = Carbon::parse($created)->addDays(30)->isoFormat('dddd, D \\d\\e MMMM \\d\\e Y');
return $exp;
}
}
¿Qué hace este código?
Crea un atributo para la clase Offer, el cual se llama expirated_at, y le suma 30 días a la fecha de creación de la entrada, que en este caso se llama Offer.
$offer = Offer::find(1);
Esta es la llamada en Controlador, para luego llamarlo en nuestra vista.
$offer->expirated_at
La cual nos mostrará la fecha de expiración que es 30 días después de la fecha de creación