【Laravel】Time型のレコードをフォーマットして出力する時のエラーの回避対策
Time型のレコードを出力したい時に、少し手間取ったのでメモを残します。
使用環境
Laravel 6.2
MySQL 8.0
現象
Time型のレコードをbladeにformat(時:分)して出力をしたいが、エラーがでます。
{{ $model->start_time->format('hh:ii') }}
Call to a member function format() on string
エラーを調べると、modelにカラムを追加すると解消できるとありました。
公式では、「日付ミューテタ」とあります。
protected $dates = [
'start_time',
];
ですが、また別のエラーが出力されました。
Unexpected data found. Unexpected data found. Data missing
所謂、取り出すデータと出力するフォーマットが異なっているエラーだと思います。
結論
そもそも、Time型の値を日付ミューテタにするのは間違いです。
日付ミューテタと言っているくらいなので、Date型などの日付に絡んだレコード出ないといけません。
また、Call to a member function format() on string
も
文字列をformatできないエラーです。
DBから直接、値を出力しているため文字列になります。
では、一番簡単に(時:分)で出力するためには??
対策
substr
を使うと手っ取り早いです!
以下、PHP公式マニュアルです。
substr(string $string, int $offset, int|null $length = null): string
文字列 string の、offset で指定された位置から length バイト分の文字列を返します。
なので、(時:分)で表すには、
{{ substr($model->start_time,0,5) }}
これで出力できます。
参考
https://teratail.com/questions/192540
https://qiita.com/shimotaroo/items/acd22877a09fb13827fb
https://readouble.com/laravel/6.x/ja/eloquent-mutators.html
https://www.php.net/manual/ja/function.substr.php
Author And Source
この問題について(【Laravel】Time型のレコードをフォーマットして出力する時のエラーの回避対策), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuichi-Iizuka/items/39c0b337fd29441b70e2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .