sequelize提供了两种一对一关系关联方法belongsTo和hasOne。以users和userInfo这两个model为例,首先我们需要创建这两个model,创建一个modelconstUser=Sequelize.defin('users',{//createusermodelid:{autoIncrement:true,//自动增量类型:Sequelize.INTEGER,primaryKey:true//声明主键},用户名:{type:Sequelize.STRING},密码:{type:Sequelize.STRING},昵称:{type:Sequelize.STRING},电子邮件:{类型:Sequelize.STRING}});constUserInfo=constUserInfo=db.defineModel('user_info',{//创建userInfo模型id:{autoIncrement:true,//自增类型:Sequelize.INTEGER,primaryKey:true//声明主键},uid:{type:Sequelize.INTEGER,unique:true},blog_url:{type:Sequelize.STRING},portrait_url:{type:Sequelize.STRING},地址:{type:Sequelize。细绳}});建立关联//belongsToUser.belongsTo(UserInfo,{foreignKey:'id',as:'info'})//hasOneUser.hasOne(UserInfo,{foreignKey:'uid',as:'info'})这两个方法有两个参数。第一个参数是模型,第二个是选项配置。options常用的两个属性是foreignKey指定外键,as指定别名。两种方法都是将userInfo表与User表关联,区别在于暴露外键的表不同,belongsTo暴露User表的'id'字段作为外键查询UserInfo表,而hasOne方法暴露UserInfo表的'uid'作为外键查询使用关联查询User.findeOne({//其中:{},用户的查询条件包括:{model:UserInfo,//关联查询为:'info'//alias//where:{}//userInfo查询条件}})注意!如果要使用别名,必须在建立关系时在第二个参数下设置as属性,同时在include中设置as属性。as的别名会在获取的数据结构中体现为你设置的别名。belongsTo生成的sql如下SELECT`users`.`id`,`users`.`username`,`user_info`.`id`AS`user_info.id`,`user_info`.`address`AS`user_info.address`FROM`users`AS`users`LEFTOUTERJOIN`user_info`AS`user_info`ON`users`.`id`=`user_info`.`id`;hasOne生成的sql如下SELECT`users`.`id`,`users`.`username`,`user_info`.`id`AS`user_info.id`,`user_info`.`address`AS`user_info.address`FROM`users`AS`users`LEFTOUTERJOIN`user_info`AS`user_info`ON`users`.`id`=`user_info`.`uid`;观察这两条sql,LEFTOUTERJOINuser_infoASuser_infoONusers.id=user_info.id和LEFTOUTERJOINuser_infoASuser_infoONusers.id=user_info.uid是不是明白了什么。belongsTo是以User的外键为条件查询UserInfo的主键。hasOne是根据UserInfo的外键作为条件查询User的主键
