私はSwift 4 + Vaporフレームワーク、Fluent ORM、およびPostgreSQLをドライバとして使用してサーバを作成しています。私は、購読者と購読(ユーザーモデルでもあります)を持つべきUser Modelを持っています。私はここで2つのオプションがあります:1.サブスクリプション/サブスクライバの一意のIDを持つ配列を格納するか、または2. 1対多のユーザーとユーザーの関係を構築します。どちらが良いと思いますか?どのように私はそれをimpemplementすることができますか?データベースの[ユーザ - サブスクリプション/サブスクライバ]リレーションを実装する最良の方法
2
A
答えて
3
アレイの格納は最適ではありません。すべてのユーザーのサブスクライバーを見つけるためにデータベースを照会するには、すべてのユーザーのサブスクリプション配列を解析し、ターゲットのユーザーIDを含むものを見つける必要があります。関係は良いアイデアです。
Fluentは、多対多関係をモデル化するためにPivotクラスを使用します。自己参照関係であるため、IDキーの競合を避けるために、独自の「スルー」モデルを作成するのが最も簡単です。
import FluentProvider
import Vapor
final class Subscription: Model, PivotProtocol {
typealias Left = User
typealias Right = User
var subscriberId: Identifier
var subscribedId: Identifier
init(
subscriberId: Identifier,
subscribedId: Identifier
) {
self.subscriberId = subscriberId
self.subscribedId = subscribedId
}
let storage = Storage()
static let leftIdKey = "subscriber_id"
static let rightIdKey = "subscribed_id"
init(row: Row) throws {
subscriberId = try row.get("subscriber_id")
subscribedId = try row.get("subscribed_id")
}
func makeRow() throws -> Row {
var row = Row()
try row.set("subscriber_id", subscriberId)
try row.set("subscribed_id", subscribedId)
return row
}
}
extension User {
var subscribers: Siblings<User, User, Subscription> {
return siblings(localIdKey: "subscriber_id", foreignIdKey: "subscribed_id")
}
var subscribed: Siblings<User, User, Subscription> {
return siblings(localIdKey: "subscribed_id", foreignIdKey: "subscriber_id")
}
}
関連する問題
- 1. 私のデータベースにピクチャテーブルを実装する最も良い方法
- 2. ExtJSアプリケーションのログイン画面を実装する最良の方法
- 3. 株式相場クラスを実装する最良の方法
- 4. WinForms/WPFの "Remember Me"チェックボックスを実装する最良の方法
- 5. HATEOASのリンクリレーションシップをXMLで実装する最良の方法は?
- 6. 複数のフィルターを実装する最良の方法AngularJS?
- 7. C#でこのフローを実装する最良の方法
- 8. CFでwebserviceを実装するための最良の方法
- 9. アンドロイドでWebベースのアプリケーションを実装する最良の方法
- 10. プラグインのサポートを実装する最良の方法
- 11. 私自身のストレージサービスを実装する最良の方法は?
- 12. WordPressのウェブサイトでCDNを実装する最良の方法は?
- 13. 角度ユニバーサルを実装するための最良の方法
- 14. Azureデータベースでマルチテナントを実装する最も良い方法は何ですか
- 15. php4でtry catchを実装する最良の方法
- 16. iPhoneプロジェクトでAdWhirlを実装する最良の方法
- 17. プッシュ通知システムを実装する最良の方法
- 18. イントロシーケンスを実装する最良の方法は? Swift
- 19. "カスタム"通貨をレールに実装する最良の方法は?
- 20. クラスセレクタを実装する最良の方法
- 21. Zend Frameworkで多言語を実装する最良の方法
- 22. nodejs "サービス"を実装する最良の方法
- 23. cakephp 2.0でoauth consumerを実装する最良の方法
- 24. Djangoアプリケーションでエージェントを実装する最良の方法
- 25. Railsアプリケーションで投票を実装する最良の方法は?
- 26. スタックと単一リンクリストを実装する最良の方法
- 27. "エンドレスページ"をレールに実装する最良の方法は?
- 28. リアルタイムIPホワイトリストシステムを実装する最良の方法
- 29. React-nativeでStripeを実装する最も良い方法は?
- 30. httpでセキュリティを実装する最も良い方法は
すばらしく詳細な回答をいただきありがとうございます。私はそれが良い出発点だと思う^‿^ – Edward