尝试将电话号码与用户关联会导致节点告诉我User对象没有方法addPhonenumber。 (也可以使用setPhonenumber)
req.user.setPhonenumbers(phonenumber).success(function(user){
^
TypeError: Object [object Object] has no method 'setPhonenumbers'
如何正确关联对象?代码如下。
models.js中的对象定义:
exports.User = require("./user")(sequelize, Sequelize);
exports.Phonenumber = require("./phonenumber")(sequelize, Sequelize);
exports.Recording = require("./recording")(sequelize, Sequelize);
exports.Call = require("./call")(sequelize, Sequelize);
User
.hasMany(Phonenumber)
.hasMany(Recording);
Phonenumber
.belongsTo(User)
.hasOne(Recording)
.hasMany(Call);
Recording.belongsTo(User);
Call.belongsTo(Phonenumber);
尝试设置关联:
var phonenumber = yp.db.Phonenumber.create({
number: number.phone_number
}).success(function(number){
console.log(number);
console.log(req.user);
req.user.setPhonenumbers(phonenumber).success(function(user){
console.log(user);
});
});
以上引用的req.user:
的console.log结果{ __options:
{ timestamps: true,
instanceMethods: { fullname: [Function] },
classMethods: {},
validate: {},
freezeTableName: false,
underscored: false,
syncOnAssociation: true,
paranoid: true,
omitNull: false,
hasPrimaryKeys: false },
hasPrimaryKeys: false,
selectedValues:
{ firstname: 'Nathan',
lastname: 'Loyer',
email: 'xxx@gmail.com',
password: '****',
facebookid: '****',
id: 2,
createdAt: Thu Feb 28 2013 20:40:29 GMT-0600 (CST),
updatedAt: Wed Mar 06 2013 20:22:05 GMT-0600 (CST),
deletedAt: null },
firstname: 'Nathan',
lastname: 'Loyer',
email: 'xxx@gmail.com',
password: '****',
facebookid: '****',
id: 2,
createdAt: Thu Feb 28 2013 20:40:29 GMT-0600 (CST),
updatedAt: Wed Mar 06 2013 20:22:05 GMT-0600 (CST),
deletedAt: null,
isNewRecord: false }
我错过了什么?
谢谢!
答案 0 :(得分:1)
您的每个hasMany都需要匹配的belongsTo。并且,相关的函数将是setPhonenumbers。请参阅:http://www.sequelizejs.com/documentation#associations-associating-objects
答案 1 :(得分:0)
事实证明,我的命名不够严格。在phonenumber模型的模型定义中,我使用Number而不是Phonenumber。
module.exports = function(sequelize, Sequelize){
return sequelize.define('Number',{
number: Sequelize.STRING,
},{
paranoid: true
});
}
因此它创建了一个setNumbers函数,而不是setPhonenumbers函数。将此更改为Phonenumber并重新创建表使上述代码几乎可以正常工作。 setPhonenumbers似乎想要一个数组,所以我使用了addPhonenumber。