sequelize 管理查詢 一對一關聯查詢

2021-09-13 10:55:47 字數 1921 閱讀 1779

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_infoasuser_infoonusers.id=user_info.id和left outer joinuser_infoasuser_infoonusers.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...