我已將 FCM(Firebase 雲端訊息傳遞)通知與我的 Laravel 專案整合。
我在 User
模型中加入了方法 routeNotificationForFcm
。
當直接在方法中指定 firebase 設備令牌時,通知系統運作正常,但當從資料庫存取令牌時,通知系統無法運作。
新增的工作代碼如下。
public function routeNotificationForFcm() { return ['dJQqgKlETpqCB3uxHtfUbL:APA91bFdrcXZMNH0iMjkXMoop_b_nI3xF92DU0P1nrHVQsTDK4w-OH5QR6BsnWIV-wSxSV7avzuBmLVizNyrRcKfAQz6H66JEP9rWKUeIi7m7wEZwRiuW_WdCW_LaZajdFZlxfCUonCL']; }
不起作用的程式碼如下(資料庫查詢)
public function routeNotificationForFcm() { return $this->from('fcm_tokens')->where('user_id', $user->id)->pluck('device_token'); }
顯示的錯誤訊息是註冊令牌不是有效的 FCM 註冊令牌
根據Laravel 文件 pluck return
Collection
- 所以你只需要在查詢/集合上呼叫pluck
後呼叫toArray()
即可傳回陣列
,就像您之前對模擬令牌所做的那樣。您也呼叫了
$user->id
,但在此範圍內沒有。 解決方案很簡單,您需要傳遞值或從$this
取得值。但我個人建議您為此定義單獨的關係
FcmToken
- 只是猜測您如何命名模型。 然後您可以像這樣重複使用它來傳回特定User
模型的相關令牌的array
#最後,如果您像這樣建立程式碼,您將擁有一般關係,並利用這種關係使您的程式碼更加靈活。