Laravelでデータベースから取得した日付をDatetime型として扱うには

Laravel Laravel

Laravel 6のときには、Bladeで

    <div class="form-group">
        <label for="expiration_date">期限日</label>
        <input type="date" name="expiration_date" id="expiration_date"
            class="form-control @error('expiration_date') is-invalid @enderror "
            value="{{ old('expiration_date',$task->expiration_date) }}">
        @error('expiration_date')
        <div id="validateExpirationDate" class="invalid-feedback">
            {{ $message }}
        </div>
        @enderror
    </div>

のように

$task->expiration_date

$(モデルのオブジェクト)->プロパティ(カラム)

でデータベースから日付形式の値を取得すると、

2021-09-05

という形式の値になっていましたが、Laravel 8では

2021/09/05

という形式になっていて、<input type=”date”>のvalue属性の値に入れても、ブラウザで表示するとテキストボックスの中に日付が表示されません。(<input type=”date”>の場合は、value属性の値は”Y-m-d”にする必要がある)

日付形式のカラムの値をDatetime型として扱うことで、fomat()メソッドをBladeの中で使うことができます。モデルに下記のプロパティを追記します。

    /** @var array Datetime型として扱うカラム */
    protected $dates = [
        'expiration_date',
        'completion_date',
    ];

Bladeでformat()を使って、日付形式のフォーマットをすることが可能です。

$task->expiration_date->format('Y-m-d')
この記事を書いた人

余分なこだわりは捨てる。それがぼくのスタイル。

PHPでWebアプリを作り、小さな花の写真を撮ってよろこんでいる人。元Webエンジニア。プログラミング講師。余分なこだわりを捨てて生きやすくなりたいと思いつつも、なかなかこだわりを捨てきれない頑固者。まろと呼んでください。

さかのうえの まろをフォローする
Laravel
シェアする