如何解决使用 DataStore 的 AWS FlutterAmplify
我们如何通过查询获取用户对话。理想的做法是对用户表进行查询并加载所有用户对话。 例子:
final user = await Amplify.DataStore.query(User.classtype,where: User.ID.eq(id))
user.conversations 加载对话列表。
如果不能这样做,接下来是获取具有特定用户的所有对话。 示例不起作用:
await Amplify.DataStore.query(UserConversation.classtype
where: UserConversation.USER.eq(user.id)
)
type Message @model @auth(rules: [{allow: public}]) {
id: ID!
ConversationId: Conversation @connection
UserId: User @connection
body: String
createdDate: AWSDateTime!
}
type Conversation @model @auth(rules: [{allow: public}]) {
id: ID!
date: AWSDateTime
readBy: [ReadBy] @connection(keyName: "byConversation",fields: ["id"])
users: [UserConversation] @connection(keyName: "byConversation",fields: ["id"])
name: String
image: String
}
type ReadBy @model @auth(rules: [{allow: public}]) @key(name: "byConversation",fields: ["conversationID"]) {
id: ID!
date: AWSDateTime
RedByUsers: User @connection
conversationID: ID
}
type User @model @auth(rules: [{allow: public}]) {
id: ID!
firstName: String
lastName: String
userImg: String
createdDate: AWSDateTime
updatedDate: AWSDateTime
email: AWSEmail
conversations: [UserConversation] @connection(keyName: "byUser",fields: ["id"])
}
type UserConversation @model(queries: null) @key(name: "byUser",fields: ["userID","conversationID"]) @key(name: "byConversation",fields: ["conversationID","userID"]) @auth(rules: [{allow: public},{allow: public}]) {
id: ID!
userID: ID!
conversationID: ID!
user: User! @connection(fields: ["userID"])
conversation: Conversation! @connection(fields: ["conversationID"])
}
解决方法
通过执行以下操作,我能够获得第二个版本:
await Amplify.DataStore.query(UserConversation.classType
where: User.ID.eq(user.id)
);
以上将执行所有用户对话的选择,这些对话的用户 id 等于 user
变量的 id。起初,您为什么需要为查询传递 User.ID 有点令人困惑,但据我所知,这是由于 AWS DataStore 创建 SQL 查询的方式,它正在幕后进行连接,并且因此将使用第二个表(在本例中为用户表)的列来执行连接。我希望我能指出一些关于此的文档,但我找不到任何文档。我有点幸运地尝试了一堆东西,并在错误消息中注意到 SQL 查询是如何生成的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。