→推薦:《laravel教程》
由于項目中使用到了消息通知功能,于是自然而然寫出了如下代碼
public?function?index(Request?$request) { ????$notifications?=?Auth::user()->notifications()->paginate($request->size); ????return?$this->success($notifications); }
然而發(fā)現(xiàn)日期格式化不對
但是模型基類使用了 HasDateTimeFormatter trait, 代碼如下:
<?php namespace AppModelsTraits; trait HasDateTimeFormatter { protected function serializeDate(DateTimeInterface $date) { return $date->format($this->dateFormat??:?'Y-m-d?H:i:s'); ????} }
查看源代碼發(fā)現(xiàn) IlluminateNotificationsNotifiable 這個 trait 有兩個 trait,其中
IlluminateNotificationsHasDatabaseNotifications 的 notifications() 方法關(guān)聯(lián)的是IlluminateNotificationsDatabaseNotification 這個類, 由于這個類是laravel 自帶的, 所以serializeDate方法自然不會起作用。
找到了問題所在,那就解決吧。首先定義自己的 Notification 模型類, 繼承自框架自帶的 IlluminateNotificationsDatabaseNotification 類,再引用 HasDateTimeFormatter trait,代碼如下:
<?php namespace AppModels; use AppModelsTraitsHasDateTimeFormatter; use IlluminateNotificationsDatabaseNotification; class Notification extends DatabaseNotification { use HasDateTimeFormatter; public function notifiable() { return $this->morphTo(); ????} }
最后我們在 User 模型中覆蓋 notifications() 方法,使用我們自己定義的 ? ?Notification 模型來關(guān)聯(lián),代碼如下:
<?php namespace AppModels; use AppModelsTraitsHasDateTimeFormatter; use IlluminateFoundationAuthUser as Authenticatable; use TymonJWTAuthContractsJWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable, HasDateTimeFormatter; public function notifications() { return $this->morphMany(Notification::class,?'notifiable')->orderBy('created_at',?'desc'); ????} }
問題解決,效果如下:
?《相關(guān)推薦:laravel教程》?
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END