私はsqlalchemyの初心者です。現在、Flask でサイトを開発中です。メッセージシステムをスレッドで編成したい。Facebookのダイアログのようなもの。次のモデルがあり、このコードは機能します:
message_read_state_relations = db.Table('message_message_read_state_relations',
db.Column('user_id', db.Integer, db.ForeignKey('auth_users.id')),
db.Column('message_id', db.Integer, db.ForeignKey('messages.id')),
)
class User(db.Model):
__tablename__ = 'auth_users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100))
password = db.Column(db.String(100))
messages = db.relationship('Message', backref=db.backref('user'), lazy='dynamic')
threads = association_proxy('user_thread_relations', 'thread')
class Message(db.Model):
__tablename__ = 'messages'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.Text, default='')
thread_id = db.Column(db.Integer, db.ForeignKey('threads.id'))
user_id = db.Column(db.Integer, db.ForeignKey('auth_users.id'))
user_read_states = db.relationship('User', secondary=message_read_state_relations,
backref=db.backref('message_read_states'), lazy='joined')
class Thread(db.Model):
__tablename__ = 'threads'
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(255))
messages = db.relationship('Message', backref=db.backref('thread'), lazy='dynamic')
users = association_proxy('user_thread_relations', 'user')
class UserThreadRelation(db.Model):
__tablename__ = 'user_thread_relations'
user_id = db.Column(db.Integer, db.ForeignKey('auth_users.id'), primary_key=True)
thread_id = db.Column(db.Integer, db.ForeignKey('threads.id'), primary_key=True)
is_deleted = db.Column(db.Boolean, default=False)
user = db.relationship(User, backref=db.backref('user_thread_relations'))
thread = db.relationship(Thread, backref=db.backref('user_thread_relations'))
しかし、私はいくつかのことを理解できません。たとえば、ユーザーのすべての未読メッセージ数を取得するにはどうすればよいですか? または、一部のスレッドでユーザーの未読メッセージがカウントされますか?
Message
User
viaと関係がありmessage_read_state_relations
ます。このユーザーではなく、ユーザーに属するすべてのスレッドに属するすべてのメッセージを取得するにはどうすればよいmessage_read_state_relations
ですか?
それとも、私のやり方が間違っているのでしょうか?デザインがおかしい?この質問スレッド メッセージング システム データベース スキーマ設計に基づいて作成しました
助けてくれてありがとう!