→推奨:「laravelチュートリアル」
プロジェクト内でメッセージ通知機能を利用しているので、必然的に以下のようなコードを書きました
public function index(Request $request) { $notifications = \Auth::user()->notifications()->paginate($request->size); return $this->success($notifications); }
ただし、日付形式が間違っていることが判明しました
しかし、モデルの基本クラスは HasDateTimeFormatter
トレイトを使用しており、コードは次のとおりです。
<?php namespace App\Models\Traits; trait HasDateTimeFormatter { protected function serializeDate(\DateTimeInterface $date) { return $date->format($this->dateFormat ?: 'Y-m-d H:i:s'); } }
ソース コードを表示すると、Illuminate\Notifications\Notifiable
が見つかりました。このトレイトには 2 つのトレイトがあり、その中には Illuminate の
notifications() メソッドがあります。 \Notifications\HasDatabaseNotifications
は Illuminate\Notifications\DatabaseNotification
に関連付けられています。このクラスは、laravel に付属しているため、当然のことながら serializeDate
メソッドは機能しません。
問題が見つかったら、解決しましょう。まず独自の Notification
モデル クラスを定義し、フレームワークに付属する Illuminate\Notifications\DatabaseNotification
クラスから継承してから、HasDateTimeFormatter
トレイト、コードを参照します。
<?php namespace App\Models; use App\Models\Traits\HasDateTimeFormatter; use Illuminate\Notifications\DatabaseNotification; class Notification extends DatabaseNotification { use HasDateTimeFormatter; public function notifiable() { return $this->morphTo(); } }
最後に、User
モデルの notifications()
メソッドをオーバーライドし、独自に定義した Notification
モデルを使用して、コードは次のとおりです:
<?php namespace App\Models; use App\Models\Traits\HasDateTimeFormatter; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable, HasDateTimeFormatter; public function notifications() { return $this->morphMany(Notification::class, 'notifiable')->orderBy('created_at', 'desc'); } }
問題は解決され、その効果は次のとおりです:
"関連する推奨事項: 最新の 5 つの Laravel ビデオ チュートリアル"
以上がLaravel7 メッセージ通知日付シリアル化ソリューションを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。