Trabalhar com datas em qualquer idioma pode ser difícil. PHP não é diferente. Embora a DateTime
classe tenha muitas funcionalidades incorporadas, ainda deixa alguns recursos a desejar. Felizmente, Brian Nesbitt criou a classe Carbon . Esta é uma extensão da DateTime
classe básica do PHP .
O Laravel usa esta classe Carbon em seu framework. Por padrão, os carimbos de data / hora que são adicionados automaticamente a qualquer tabela que você criar são recuperados do banco de dados como objetos Carbon. No entanto, e se você tiver outra date
coluna lá e quiser que ela seja retornada como um objeto Carbon também.
Depois de algumas pesquisas, descobri que o modelo básico do Eloquent tem um método para controlar quais datas são retornadas como objetos Carbon. O método está abaixo.
// vendor/laravel/framework/src/illuminate/Database/Eloquent/Model.php
/**
* Get the attributes that should be converted to dates.
*
* @return array
*/
public function getDates()
{
return array(static::CREATED_AT, static::UPDATED_AT, static::DELETED_AT);
}
Isso significa que você pode sobrescrever esse método em suas classes de modelo e definir quais datas são retornadas como objetos Carbon. Se você deseja apenas adicionar uma coluna de data a este método, implemente-o de forma semelhante ao código abaixo.
/**
* Get the attributes that should be converted to dates.
*
* @return array
*/
public function getDates()
{
return array_merge(parent::getDates(), array('purchase_date'));
}
Agora, sempre que você recuperar o purchase_date
do banco de dados, poderá usar os métodos incríveis que vêm com o objeto Carbon. Essa foi fácil!
Atualização (26 de setembro de 2013)
Em 6 de setembro de 2013, Taylor incorporou alguns códigos ao framework do Laravel, o que torna o trabalho com datas ainda mais fácil! Em vez de substituir a getDates()
função, qualquer propriedade de data extra agora pode ser adicionada a um $dates
array no modelo do Eloquent. Essas propriedades de data serão transformadas automaticamente em objetos Carbon. Aqui está um exemplo: </p>
class User extends Eloquent {
protected $dates = array('purchase_date');
}
Agora a data_de_compra será um objeto Carbon, que pode então ser manipulado facilmente!