Sequelizeは、ノード+MySQLWebアプリで使用するのに適したORMフレームワークであることがわかりました。しかし、データベーステーブルを設計しているときに、Sequelizeアソシエーションについて非常に混乱しました。
Webアプリでのユーザーとシステムの通知を非常に単純なケースと考えてください。
- このサイトには多くのユーザーがいます
- サイトは一部またはすべてのユーザーに通知を送信し、同じ通知を1つのレコードとして保存するだけです
- ユーザーは、受け取った通知が読まれているかどうかを知ることができます(読まれた日付までに)
次に、期待どおりに3つのテーブルを設計します。
User:id、nameNotification:id、、、、title_content_sendAtNotify:id、UserId(受信者として)NotificationId、、readAt
Sequelizeで簡単に定義Userしてモデル化できます。しかし、外部キーとによって、関連Notification付けを使用して2つのテーブルに関連付ける方法がわかりません。NotifyUserIdNotificationId
私はhasOneこのような関連付けを使用しようとしました:
Notify.hasOne(User);
Notify.hasOne(Notification);
次に、とテーブルNotifyIdの両方に列があります。そして、これは私の期待どおりではありません。アソシエーションの使い方を間違えたので、正しく使う方法を知りたいですか?UserNotification
さらに、JSONとして結果を取得したい場合:
[
{id: 123, user: [Object some user], notification: [Object some notification], readAt: null},
{id: 124, user: [Object another user], notification: [Object some notification], readAt: "Mon Oct 29 2012 20:44:54 GMT+0800"}
]
find以前に使用したSQLのように、メソッドクエリを1回だけ使用するにはどうすればよいですか。
SELECT
Notify.id as 'Notify.id',
User.name as 'User.name',
Notification.title as 'Notification.title',
Notification.sendAt as 'Notification.sendAt',
Notify.readAt as 'Notify.readAt'
FROM User, Notification, Notify
WHERE
Notify.UserId = User.id AND
Notify.NotificationId = Notification.id;