Laravelでcreated_atとupdated_atを任意のフォーマットで取得する

      2016/03/07

Laravelでmodelを使ってcreated_atやupdated_atを取得する際に、デフォルトだとCarbonのオブジェクトとして取得されてしまうのを自動で任意のフォーマットで取得するための方法を調べてみました。

結論から言うと、以下のようなクラスを作って、各Modelから継承するようにしました。

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class BaseModel extends Model
{
    public function getCreatedAtAttribute($date)
    {
        return Carbon::createFromFormat('Y-m-d H:i:s', $date)->timestamp;
    }

    public function getUpdatedAtAttribute($date)
    {
        return Carbon::createFromFormat('Y-m-d H:i:s', $date)->timestamp;
    }
}

LaravelのModelではgetXXXAttributeの形式でModelにメソッドを作ると、XXXで指定したカラムの値を書き換えて取得することが出来るのでこれを利用しています。
※ちなみにsetXXXAttributeとすると、DBに登録する前の値を書き換えることもできます。

引数($date)で取得した段階では文字列として取得されるため、これを一度Carbonに変換してから任意の形式で取得することができます。
上記の例では、timestampの値を取得するようにしました。

任意のフォーマットの文字列として取得したい場合は以下のようにすると良いと思います。

return Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');

 - 技術系(サーバーサイド) , , ,