作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 knex 处理我的所有数据库需求之后,我一直在研究 bookshelf.js 来设置模型并获得更多结构。
我通过一个简单的演示进行了尝试。
用户(表)
任务(表)
然后我像这样定义我的模型。
var User = bookshelf.Model.extend({
tableName: 'user',
assigned_tasks: function(){
return this.hasMany(Task, ['assigned_to']);
},
created_tasks: function(){
return this.hasMany(Task, ['created_by']);
}
})
var Task = bookshelf.Model.extend({
tableName: 'task',
created_by_user: function(){
return this.belongsTo(User, ['created_by'], ['id']);
},
assigned_to_user: function(){
return this.belongsTo(User, ['assigned_to'], ['id']);
}
})
当我运行以下函数时,我得到了我想要的响应。
function getAllUsers(){
new User().fetchAll({withRelated: ['assigned_tasks', 'created_tasks']}).then(function(result){
var data = result.toJSON();
data.forEach(function(user){
console.log(user);
})
})
}
我获得了所有用户的数组,其中包含分配给该用户的任务的数组以及该用户创建的任务的数组。
但是当我运行以下函数时
function getAllTasks(){
new Task().fetchAll({withRelated: ['assigned_to_user', 'created_by_user']}).then(function(result){
var data = result.toJSON();
data.forEach(function(task){
console.log(task);
})
})
}
我得到了任务,但字段分配给用户和创建的用户只是空对象。
{ id: 1,
description: 'Ta på folk',
project_id: '1',
priority: 2,
start_date: null,
due_date: null,
end_date: null,
status: 1,
created_by: 1,
assigned_to: 2,
created_at: null,
updated_at: null,
assigned_to_user: {},
created_by_user: {} }
有什么我没明白的吗?该任务不应该包含一个带有引用的用户的对象吗?
谢谢
最佳答案
所以我明白了这一点。看来我的语法是唯一错误的。
所以当这样做时:
var Task = bookshelf.Model.extend({
tableName: 'task',
created_by: function(){
return this.belongsTo(User, 'created_by');
},
assigned_to: function(){
return this.belongsTo(User, 'assigned_to');
}
})
我的任务已返回,其中包含填充了信息的created_by 和signed_to 对象。
{ id: 1,
description: 'Ta på folk',
project_id: '1',
priority: 2,
start_date: null,
due_date: null,
end_date: null,
status: 1,
created_by:
{ id: 1,
name: 'Stian Bakken',
slack_name: 'stiba',
slack_id: 'RU233UR',
nickname: 'the dog',
created_at: null,
updated_at: null },
assigned_to:
{ id: 2,
name: 'Thomas Feit',
slack_name: 'thraxx',
slack_id: 'RJKJK42',
nickname: 'The cave',
created_at: null,
updated_at: null },
created_at: null,
updated_at: null }
在获取关系的多个维度时,我还发现了另一件事。
function getAllUsers(){
new User().fetchAll({withRelated: ['assigned_tasks', 'created_tasks', 'assigned_tasks.assigned_to', 'assigned_tasks.created_by', 'created_tasks.assigned_to', 'created_tasks.created_by']}).then(function(result){
var data = result.toJSON();
data.forEach(function(user){
console.log(user);
user.assigned_tasks.forEach(function(task){
console.log(task);
})
})
})
}
返回以下结果:
{ id: 1,
name: 'Stian Bakken',
slack_name: 'stiba',
slack_id: 'RU233UR',
nickname: 'the dog',
created_at: null,
updated_at: null,
assigned_tasks: [],
created_tasks:
[ { id: 1,
description: 'Ta på folk',
project_id: '1',
priority: 2,
start_date: null,
due_date: null,
end_date: null,
status: 1,
created_by: [Object],
assigned_to: [Object],
created_at: null,
updated_at: null } ] }
因此,它会使用创建任务的用户和分配任务的用户的用户信息填充用户对象内的各个任务。我希望这对某人有帮助!
关于javascript - 如何在 bookshelf.js 中设置我的数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174552/
我是一名优秀的程序员,十分优秀!