laravel日付のフォーマットで「Could not check compatibility」エラー

製作 プログラム

最終更新日:2022/05/11

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

最近ララベルのことばっかり書いていますよね。もはやぞっこん。…いやなんでもないです。

今回はlaravelのタイムスタンプ型の日付フォーマットをモデル内でやっちゃう!っていう時のエラー。通常はbladeでタイムスタンプをアロー演算子「->fomat()」みたいなのでやると思うんですが、今回はajaxというかlaravelから直にブラウザ側に日付データを渡す感じの、そういうパターン。

よくわからないけど「protected function serializeDate(DateTimeInterface $date)」をオーバーライドしてね!って書いてあるやつ。

こんなエラー

Could not check compatibility between App\Models\○○::serializeDate(App\Models\DateTimeInterface $date) and Illuminate\Database\Eloquent\Model::serializeDate(DateTimeInterface $date), because class App\Models\DateTimeInterface is not available

一応laravelの公式マニュアル通りに設定してるんですが、いくらやっても上記エラーが出る。

今回はlaravelで日付フォーマットをモデル内に書くときのエラーの治し方を紹介しますね。

「use DateTimeInterface;」でOK

まずサクッと解決方法から。

モデルファイル(Eloquent?)のuseで「use DateTimeInterface;」を追加して上げればOK!

こんな感じ:Test.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use DateTimeInterface;

class Test extends Model
{
.
.
.
protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y-m-d');
}

エラー見てみると「DateTimeInterface」ないじゃん!有効じゃないじゃん!って怒ってるんで追加して上げるとOKみたい。

公式ドキュメントの抜け?

個人的にlaravelの公式ドキュメントはものすごい信用してて、ものすごい難しそうなことでも書いてる通りにやればほぼうまくいって、なんだか得意げになれるんですが、今回はもしかすると表記抜けなのかもしれません。

それかわたしが使ってるlaravelは9系みたいなので、8系公式マニュアルからその部分だけピンポイントに変更があったのかもしれません。

まとめ

今回はlaravelで日付をフォーマットしてからシリアル化してAjaxで送るときにハマってしまったエラーについて紹介しました。

まとめるとこのエラーは「use DateTimeInterface;」を冒頭に追加するだけで治ります。

公式ドキュメントにはただ単に「protected function serializeDate(DateTimeInterface $date)」オーバーライドすりゃOK!って書いてるけど、それだけじゃダメなんですね。

まあ動けばなんでもOK!参考にしてみてくださいね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /