【发布时间】:2021-04-04 18:18:24
【问题描述】:
在 ExtJS 6.02 中,我想将 2 个或更多模型加入一个商店。
一对一关系:
给定的用户只能与 DB 中的单个用户详细信息行关联:
"users": [
{
"id": 1,
"name": "Philip J. Fry",
"userDetail": 1
},
{
"id": 2,
"name": "Hubert Farnsworth",
"userDetail": 2
},
{
"id": 3,
"name": "Turanga Leela",
"userDetail": 3
},
{
"id": 4,
"name": "Amy Wong",
"userDetail": 4
}
]
"usersDetails": [
{
"id": 1,
"email": "jfry@a.com",
"sex": "m"
},
{
"id": 2,
"email": "hubert@a.com",
"sex": "m"
},
{
"id": 3,
"email": "leela@a.com",
"sex": "f"
},
{
"id": 4,
"email": "amy@a.com",
"sex": "m"
}
]
我想在商店里有这个:
"users": [
{
"id": 1,
"name": "Philip J. Fry",
"email": "jfry@a.com",
"sex": "m"
},
{
"id": 2,
"name": "Hubert Farnsworth",
"email": "hubert@a.com",
"sex": "m"
},
{
"id": 3,
"name": "Turanga Leela",
"email": "leela@a.com",
"sex": "f"
},
{
"id": 4,
"name": "Amy Wong",
"email": "amy@a.com",
"sex": "m"
}
]
一对多关系:
假设用户可以在 BD 中发布多个帖子:
"users": [
{
"id": 1,
"name": "Philip J. Fry",
"userDetail": 1
},
{
"id": 2,
"name": "Hubert Farnsworth",
"userDetail": 2
},
{
"id": 3,
"name": "Turanga Leela",
"userDetail": 3
},
{
"id": 4,
"name": "Amy Wong",
"userDetail": 4
}
]
"posts": [
{
"id": 1,
"user": 1,
"title": "Post 1 title",
"body": "Post 1 body"
},
{
"id": 2,
"user": 1,
"title": "Post 2 title",
"body": "Post 2 body"
},
{
"id": 3,
"user": 2,
"title": "Post 3 title",
"body": "Post 3 body"
},
{
"id": 4,
"user": 3,
"title": "Post 4 title",
"body": "Post 4 body"
}
]
我想要一个包含以下内容的商店:
"items": [
{
"id": 1,
"name": "Philip J. Fry",
"posts": [
{
"id": 1,
"title": "Post 1 title",
"body": "Post 1 body"
},
{
"id": 2,
"title": "Post 2 title",
"body": "Post 2 body"
}
]
},
{
"id": 2,
"name": "Hubert Farnsworth",
"posts": [
{
"id": 3,
"user": 2,
"title": "Post 3 title",
"body": "Post 3 body"
}
]
},
{
"id": 3,
"name": "Turanga Leela",
"userDetail": 3,
"posts": [
{
"id": 4,
"user": 3,
"title": "Post 4 title",
"body": "Post 4 body"
}
]
},
{
"id": 4,
"name": "Amy Wong",
"posts": []
}
]
多对一关系:
这实际上是我的实际问题,我有一个包含多个项目的数据库表,每个项目只能匹配另一个表中的单个项目。 应该与 1 到多个相同。
多对多关系:
我猜基本上与 1 到多个相同?
我似乎有这个解决方案:https://fiddle.sencha.com/#fiddle/1hs9&view/editor 它并不能涵盖所有内容,也许有更好的选择。
【问题讨论】:
-
您实际上是否有不同的端点为您提供这些数据,或者更像是您想要使用您可用的不同数据源执行准 SQL 语句?
-
嗨@incutonez,是的,它们是不同的端点。问题是后端是遗留的,它只能返回一个平面 JSON(一个对象数组),所以没有嵌套项。此外,后端 API 都在 PL/SQL 中,并且有许多其他限制,所以我们的想法是将更多的东西移到前端,看看它是否以这种方式更好地工作。这不是公共 API,我无法分享实际的真实代码。
-
那么请帮助我们...您目前对解决这个问题有何想法? Ext JS 没有将模型“加入”到一个商店的概念。无论商店的模型是什么,这都是其中所有模型的签名。您将不得不创建某种中间步骤,以按您的意愿处理您的数据。我可能会创建一个 API 端点来将这些信息拼接在一起,但我不知道这是否是您可以做的事情……强迫 UI 完成所有这些都不是一个好主意。
-
@incutonez 我的一个想法是合并模型,例如在模型中添加额外字段或创建连接模型的模型。我不明白的一件事是,由于我已经设置了模型之间的关系,因此我应该能够拥有一个用户,获取他的所有帖子,但只有与用户数据捆绑在一起时才能访问这些帖子在 API 响应中,我找不到任何获取帖子的方法。
-
好吧,因为您的帖子数据都与其他用户信息混为一谈,因此单独加载它们是没有意义的......而且,当网格加载时,您通常不会进行额外的调用每条记录以获取更多数据...您的端点通常会返回网格所需的所有数据。如果您提前知道所有端点,您可以将它们全部调用,将数据拼接在一起并将其提供给您的网格存储,或者像我说的那样,创建一个 API 端点来为您执行此操作,并将数据返回你需要的方式。
标签: json database join extjs model