sequelize 提供了兩種一對一關係關聯方法 belongsto 和 hasone
拿users和userinfo這兩個model來說,首先我們需要建立這兩個model,
建立model
const user = sequelize.defin('users', ,
username: ,
password: ,
nick_name: ,
email:
});const userinfo = const userinfo = db.definemodel('user_info', ,
uid: ,
blog_url: ,
portrait_url: ,
address:
});
建立關聯關係// belongsto
user.belongsto(userinfo, )
//hasone
user.hasone(userinfo, )
這兩個方法都是兩個引數第乙個引數為乙個model,第二個為options配置,options常用兩個屬性分別是foreignkey 指定外來鍵,和as 指定別名。使用關聯查詢兩種方法都是把userinfo表關聯到user表,區別是暴露外來鍵的表不同,belongsto暴露出的是user表的『id』字段作為外來鍵去查詢userinfo表,而hasone方法暴露的是userinfo表的『uid』作為外來鍵查詢
user.findeone(, user的查詢條件
include: // 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` left outer join `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` left outer join `user_info` as `user_info` on `users`.`id` = `user_info`.`uid`;
觀察這兩條sql,left outer joinuser_info
asuser_info
onusers
.id
=user_info
.id
和left outer joinuser_info
asuser_info
onusers
.id
=user_info
.uid
你是不是明白了些什麼。
belongsto 是根據user的外來鍵作為條件去查詢userinfo的主鍵。hasone是根據userinfo的外來鍵作為條件去查詢user的主鍵
一對多查詢
最終會將訂單資訊對映到 orders 中,訂單所對應的訂單明細對映到 orders 中的 orderdetail 屬性中。每個 orders 中的 orderdetail 屬性儲存了該訂單所對應的訂單明細。select orders.user.username user.user.birthday ...
一對多查詢
案例 查詢所有使用者資訊及使用者關聯的訂單資訊。使用者資訊和訂單資訊為一對多關係。sql語句 select u.id,u.username,u.birthday,u.u.address,o.id oid,o.number,o.createtime,o.note from user u left jo...
mybatis 一對多查詢
查詢訂單及訂單明細的資訊。這裡怎麼體現了一對多 這裡orders的id出現重複的記錄,無法對映到orders類中 collection 對關聯查詢到多條記錄對映到集合物件中 4 查詢訂單 關聯使用者 及訂單明細 public listfindordersandorderdetailresultmap...