LINE公式アカウントのWebhookイベントを全てデータベースに保存したいと考えています。
その際のテーブル設計をどのようにするのが良いか迷っています。
Webhookイベント
メッセージイベント、送信取消イベント、フォローイベント、フォロー解除イベント、参加イベント、退出イベント等々があり、メッセージイベントには更にテキストメッセージ、画像メッセージ、音声メッセージ、動画メッセージ等々があります。
https://developers.line.biz/ja/reference/messaging-api/#webhook-event-objects
これらをデータベース(MySQL)に保存するにはどのような設計をすればいいでしょうか?
はじめに思いついた方法
Webhookイベントで定義されている全ての要素をカラムとして定義するという方法です。
テキストメッセージを保存するときには不要な他のカラムは全てnullにして保存することになるのでもっといい方法がないか模索中です。
次に思いついたのが、各イベント毎のテーブルを作ってリレーションを組む方法です。
Bot has many MessageEvents.
Bot has many UnsendEvents.
Bot has many FollowEvents.
Bot has many UnfollowEvents.
等々。
Polymorphicが使えそう?
Bot has many WebhookEvents.
としてWebhookイベントには複数の形(多態性?)があるためLaravelの機能のPolymorphicを使いどころなのかなと思案中です。
Polymorphicに関してよく見かけるのがブログアプリなどでのPost,Userに紐付けるImageやCommentなどですが、
最終的には1:1トーク画面のように表示できるようにしたいため、メッセージ以外も同様に扱えるように保存したいと考えています。
自分ならこうやってWebhookイベントを保存するという考えがあれば教えていただければ幸いです。
利用環境
PHP 7.3
Laravel 6.x
MySQL 5.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/20 07:47