中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-22 21:47:36 來源:腳本之家 閱讀:186 作者:jingxian 欄目:web開發

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結構如下:

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

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

代碼寫的有點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('==========================');

// });

//cudr
function 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之表間關系就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南昌县| 青河县| 武汉市| 白朗县| 马公市| 刚察县| 临桂县| 商丘市| 贡山| 麻城市| 徐州市| 昭觉县| 石家庄市| 吉首市| 习水县| 尼玛县| 灵武市| 嘉荫县| 昔阳县| 印江| 杂多县| 观塘区| 扶绥县| 平果县| 康定县| 广宁县| 芮城县| 都匀市| 芜湖县| 陕西省| 周口市| 长子县| 新丰县| 高邑县| 陆丰市| 广宗县| 双城市| 阳西县| 礼泉县| 吐鲁番市| 湖口县|