我是sailsjs的新手。试图将我的应用程序后端更改为sailsjs。拥有我需要使用的现有数据库。尝试使用一对多关联时出现此错误:
{
"Result": [
{
"newCars": [],
"name": 'Someone',
"id": 1
}
]
}
这些是我拥有的两个样本表的结构:
table user
id | name
1 | Someone
table new_car
name | user_id
Audi | 1
BMW | 1
型号: (我不确定 - 关联,收集和通过)
//UserController.js
module.exports = {
tableName: 'user',
attributes: {
name: {
type: 'string'
},
newCars: { //i can name this anything?
collection: 'newCar', //should this be new_car (table name)?
via: 'user' //this is one-side table name?
}
},
autoCreatedAt: false,
autoUpdatedAt: false
};
//NewCarController.js
module.exports = {
tableName: 'new_car',
attributes: {
name: {
type: 'string'
},
users: {
model: 'User'
}
},
autoCreatedAt: false,
autoUpdatedAt: false
};
控制器:
Role.find(1).populate('newCars').exec(function (err, result){
res.json({Result: result});
});
我在评论中添加了一些问题。
答案 0 :(得分:1)
您需要将collection
名称更改为newcar
。在Sails
中,只要在via
,collection
,model
中引用模型,您就需要使用小写名称。阅读更多here。
注意强>
您需要允许Sails
创建自己的关联表。例如,您需要创建模型User
和Car
,然后让Sails
为您进行映射。它是通过创建User_Car
(不一定是同名)表格来内部完成的,该表格将user_id
映射到car_id
。这可以通过使用sails-generate-api
apis
来完成
$ sails generate api User
$ sails generate api Car
现在您的模型看起来像:
//User.js
module.exports = {
attributes: {
name: 'string',
cars: {
collection: 'car',
via: 'user'
}
}
};
// Car.js
module.exports = {
attributes: {
name: 'string',
user: {
model: 'user'
}
}
};
现在,您可以通过向User
发送HTTP POST
并将车发送至/user
来创建/car
要创建关联User=>Car
,请将HTTP POST
发送到/user/:id/car/:id
现在,当您通过User
获取GET /user/:id
的详细信息时,Cars
拥有的所有user[:id]
都将被填充。
答案 1 :(得分:1)
需要修复它。这对我这样的新手来说可能有用。只需要识别主键和外键。
//at the one side
id: {
type: 'integer',
primaryKey: true
}
//at the many side
user: {
columnName: 'user_id',
model: 'user'
}