如何在bookshelf.js中设置我的数据库模型
How to set up my database model in bookshelf.js
在使用knex来处理我所有的数据库需求之后,我一直在查看bookshelf.js来设置模型并获得更多的结构。
我做了一个简单的演示。
用户(表)
- id(增量)
- 名称(字符串)
任务(表)
- id(增量)
- 描述(字符串)
- created_by(整数).references (user.id)
- assigned_to(整数).references (user.id)
然后我这样定义我的模型。
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);
})
})
}
我得到任务,但字段assignd_to_user和created_by_user只是空对象。
{ 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和assigned_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 } ] }
因此,它然后使用来自创建任务的用户和分配给任务的用户的用户信息填充用户对象内的各个任务。我希望这能帮助到一些人!
相关文章:
- Jquery - 为什么我不能在 $.ajax 中访问/设置我的 var
- 如何在数组中设置我的对象
- setRequestHeader 不起作用,我想设置我的标头,然后在 Amazon EC2 中的 ajax 中发出 GE
- 如何设置我的变量,以便 D3 数据更新找到正确的对象属性
- 设置我的ASP.NET MVC 3项目自动感知正在运行的语言
- 我如何设置我的网页以接受文本字段的输入,并将其用作页面上的新文本
- 用Backbone.js设置我的模型
- 如何设置我的标题的动画,以便在加载时从左水平滑动到页面视图
- 如何设置我的wamp以允许来自其他域的请求
- 想知道为什么我的JQuery数组循环没有设置我的href's正确
- 如何使用Angular$location通过动态更改其键值params来设置我的新url位置
- 如何设置我的表单成为隐藏时加载页面
- 我需要在javascript中设置我的文本框
- 如何在我的例子中设置我的Angular指令
- 如何设置我的文本编辑器的最大长度
- 我如何设置我的cookie到一个特定的域
- 我怎么能设置我的倒计时脚本的当前日期
- 谷歌地图设置我的位置
- 我如何设置我的菜单滑出,只有当标题悬停
- 如何在bookshelf.js中设置我的数据库模型