knex js-一对多关系
knex js - one to many relation
我有两个表-Questions和Answers,它们通过Answers上名为questionId的外键连接。每个问题可能包含多个答案。我正在尝试创建一个单独的查询来获取所有字段的问题,并将答案放入类型为array的字段中。例如,这是问题结构:
{
id: 5
name: "abc",
answers: ["a","b","c"]
}
我如何强制knex按问题ID分组,并将所有问题都回答出来?我试着使用leftjoins,但它不适用于一对多关系。这就是我尝试过的:
var questionQuery = this.knex.select().table(this.questionWithAnswersTb)
.select("*")
.leftJoin(this.answersTb, this.questionWithAnswersTb + ".id", this.answersTb + ".questionId");
我会通过执行多个查询来解决这个问题。我会首先查询我想要的问题,然后您可以使用具有名称和id属性的信息创建初始的questionObjects数组。然后你可以反复调用类似的东西:
var questionObjects = [{id: 5, name: abc}, {id: 6, name: xyz}];
// first query makes something like this array ^^, then..
questionObjects.forEach(function(question, index) {
this.knex.select('answersTable.answers').from('questionsTable').leftJoin(
'answersTable',
'answersTable.questionId',
'questionsTable.id').where('answersTable.questionId', question.id})
.then(function(answers) {
answers = answers.map(/*make your answers look the way you want...*/)
questionObjects[index].answers = answers;
})
.then()回调中的最后一位可能需要对上一个查询的返回值进行一些额外的操作,以获得最终想要的数组格式的答案。
您可以从rdbms为您将要拥有的一对多或多对多关系创建sql视图。然后从这些视图进行查询。如果你打算使用knex重用这些关系,那么这样做会更容易。对于插入和更新,请在表上使用一个knex事务。
相关文章:
- 如何在Parse中创建一对多关系
- Ember数据一对多关系不起作用
- 解析-在数组一对多关系中获取父项及其子项
- 集合作为 EmberJS 中的属性?(一对多关系)
- 我将如何解决余烬数据中的这种一对多态关系
- 与 RequireJS 和 Backbone 的一对多和一对一关系
- 续集JS:包括一对多关系船
- 帆.js:模型本身的一对多关系
- 流星:如何使关系一对多
- 对于具有一对多关系的主干模型,存储“;许多“;数组中的模型,而不是Collection
- 一对多关系的简单解析查询
- knex js-一对多关系
- Parse(js)和嵌套查询中的一对多关系
- 一对多关系——变量所有者集合属性
- 如何在一对多关系中创建对象
- 如何使用Sails 0.10.x在一对多关系中引用关联模型
- 在MEAN Stack中填充MongoDB的一对多关系
- AngularJS——一个更简单的绑定一对一和一对多关系的方法
- Django,查询一对多关系的简单方法
- NodeJS|SailsJS|Waterline:一对多对多关系中的自动模型生成