国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談Node.js ORM框架Sequlize之表間關系

2019-11-19 16:00:28
字體:
來源:轉載
供稿:網友

Sequelize模型之間存在關聯關系,這些關系代表了數據庫中對應表之間的主/外鍵關系。基于模型關系可以實現關聯表之間的連接查詢、更新、刪除等操作。本文將通過一個示例,介紹模型的定義,創建模型關聯關系,模型與關聯關系同步數據庫,及關系模型的增、刪、改、查操作。

數據庫中的表之間存在一定的關聯關系,表之間的關系基于主/外鍵進行關聯、創建約束等。關系表中的數據分為1對1(1:1)、1對多(1:M)、多對多(N:M)三種關聯關系。

在Sequelize中建立關聯關系,通過調用模型(源模型)的belongsTo、hasOne、hasMany、belongsToMany方法,再將要建立關系的模型(目標模型)做為參數傳入即可。這些方法會按以下規則創建關聯關系:

hasOne - 與目標模型建立1:1關聯關系,關聯關系(外鍵)存在于目標模型中。

belongsTo - 與目標模型建立1:1關聯關系,關聯關系(外鍵)存在于源模型中。

hasMany - 與目標模型建立1:N關聯關系,關聯關系(外鍵)存在于目標模型中。

belongsToMany - 與目標模型建立N:M關聯關系,會通過sourceId和targetId創建交叉表。

為了能夠清楚說明模型關系的定義及關系模型的使用,我們定義如下4個模型對象:

用戶(User)-與其它模型存在1:1、1:N、N:M

用戶登錄信息(UserCheckin)-與User存在1:1關系

用戶地址(UserAddress)-與User存在N:1關系

角色(Role)-與User存在N:M關系

這幾個模型的E-R結構如下:

接下來上代碼,代碼和瓷土不符,請注意!

代碼寫的有點low,沒辦法,!

/** * 大家就按照我的步驟來,一點一點,要有耐心哦 * 我相信,最后肯定有你想要的!加油 *///引入框架const Sequelize = require('sequelize');//創建ORM實例const sequelize = new Sequelize('sequlizedb', 'root', 'guoguo', {  'dialect': 'mysql', // 數據庫使用mysql });//驗證連接sequelize .authenticate() .then(() => {  console.log('鏈接成功'); }) .catch((error) => {  console.log('鏈接失敗' + error); })//模型的創建const User = sequelize.define('user', { name: Sequelize.STRING, age: Sequelize.INTEGER,}, {  freezeTableName: true, });// User.create({//  name: 'guo',//  age: 25// })//  .then((result) => {//   console.log('=======添加成功===================');//   console.log(result);//   console.log('==========================');//  })//  .catch((error) => {//   console.log('==========================');//   console.log('添加失敗' + error);//   console.log('==========================');//  });// const Role=sequelize.define('role',{//  name:{//   type:sequelize.STRING,//  }// },// {freezeTableName:true});const Message = sequelize.define('message', { text: Sequelize.STRING,}, {  freezeTableName: true, });const Image = sequelize.define('image', { url: Sequelize.STRING,}, {  freezeTableName: true, });//刪除表// sequelize.drop()// .then((logging)=>{//  console.log('==========================');//  console.log('刪除成功!'+logging);//  console.log('==========================');// })// .catch((error)=>{//  console.log('==========================');//  console.log('刪除失敗'+error);//  console.log('==========================');// });//建立關系// Message.belongsTo(User);// Message.hasMany(Image);//同步到數據庫// sequelize.sync({//  force: true,// }).then(() => {//  console.log('==========================');//  console.log('同步成功');//  console.log('==========================');// }).catch(() => {//  console.log('==========================');//  console.log('同步失敗');//  console.log('==========================');// });//cudrfunction addUers(name, age) { User.create({  name: name,  age: age, }).then((log) => {  log = JSON.stringify(log);  console.log('==========================');  console.log('增加用戶成功' + log);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('增加用戶失敗' + error);  console.log('=========================='); });}function addMessage(userId, text) { Message.create({  text: text,  userId: userId, }).then((log) => {  log = JSON.stringify(log);  console.log('==========================');  console.log('增加成功!' + log);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('增加失敗!' + error);  console.log('=========================='); });}function addImage(messageId, imageUrl) { Image.create({  url: imageUrl,  messageId: messageId, }).then((log) => {  log = JSON.stringify(log);  console.log('==========================');  console.log('添加圖片成功' + log);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('添加圖片失敗' + error);  console.log('=========================='); });}//測試//addUers('楊雪嬌',22);//addMessage(2, '楊雪嬌發來的消息3');// addImage(5,'http://3.png');// addImage(6,'http://4.png');// addImage(2,'http://2.png');// //function getAllMessage() { Message.findAll({  where: {   userId: 2  },  include: [   {    model: User,    attributes: [     'id',     'name',    ],   },   {    model: Image,    attributes: [     'id',     'url'    ]   }  ], }).then((result) => {  result = JSON.stringify(result);  console.log('==========================');  console.log(result);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('查詢失敗' + error);  console.log('=========================='); });}//測試//getAllMessage();//刪除消息function delMessage(userId, messageId) { Message.destroy({  where: {   userId: userId,   id: messageId,  }, }).then((log) => {  log = JSON.stringify(log);  console.log('==========================');  console.log('刪除消息成功!' + log);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('刪除消息失敗!' + error);  console.log('=========================='); });}//測試//測試發現問題 如果不設置級聯 則,從屬message表的image表記錄不會刪除,而只是出現對應messageId 為NULL的現象//delMessage(2,4);const Role = sequelize.define('role', { name: {  type: Sequelize.STRING, allowNull: true, }}, {  freezeTableName: true, });//對于單個模型的同步// Role.sync().then((log) => {//  log = JSON.stringify(log);//  console.log('==========================');//  console.log('Role表數據同步成功' + log);//  console.log('==========================');//  Role.create({//   name: '管理員'//  }).then((log) => {//   log = JSON.stringify(log);//   console.log('==========================');//   console.log('添加的數據為' + log);//   console.log('==========================');//  }).catch((error) => {//   console.log('==========================');//   console.log('添加數據失敗' + error);//   console.log('==========================');//  });// }).catch((error) => {//  console.log('==========================');//  console.log('Role模型與表數據同步失敗' + error);//  console.log('==========================');// });//定義User1模型const User1 = sequelize.define('user1', { name: {  type: Sequelize.STRING,  validate: {   notEmpty: true,   len: [2, 30],  } }, age: {  type: Sequelize.STRING,  defaultValue: 21,  validate: {   isInt: {    msg: '年齡必須是整數!',   }  } }, email: {  type: Sequelize.STRING,  validate: {   isEmail: true,  } }, userpicture: Sequelize.STRING,}, {  freezeTableName: true, });////同步User1模型// User1.sync().then((log) => {//  log = JSON.stringify(log);//  console.log('==========================');//  console.log('User1表數據同步成功' + log);//  console.log('==========================');// }).catch((error) => {//  console.log('==========================');//  console.log('User1模型與表數據同步失敗' + error);//  console.log('==========================');// });function addUser1(userInfo) { User1.create({  name: userInfo.name,  age:userInfo.age,  email:userInfo.email, }).then((log) => {  log = JSON.stringify(log);  console.log('==========================');  console.log('添加的數據為' + log);  console.log('=========================='); }).catch((error) => {  console.log('==========================');  console.log('添加數據失敗' + error);  console.log('=========================='); });}const userInfo={ name:'郭東生', //age:0.1,//Validation error: 年齡必須是整數! age:22, email:'7758@qq.com', //email:'7758',//Validation error: Validation isEmail on email failed}addUser1(userInfo);

以上這篇淺談Node.js ORM框架Sequlize之表間關系就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴东县| 河间市| 藁城市| 丹凤县| 泊头市| 黔西县| 县级市| 阿巴嘎旗| 高雄县| 丽水市| 武宁县| 石棉县| 宜昌市| 菏泽市| 磴口县| 吴江市| 岳阳市| 深圳市| 蒙山县| 密山市| 武胜县| 沂南县| 巧家县| 山阳县| 濉溪县| 罗田县| 柳州市| 阿合奇县| 耒阳市| 宁南县| 临武县| 德惠市| 江山市| 凌源市| 金山区| 思南县| 邢台县| 长岭县| 西平县| 郁南县| 阳谷县|