欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Sequelize連接查詢時inlude中model和association的區(qū)別詳解

 更新時間:2017年02月27日 08:33:10   作者:IT筆錄  
這篇文章主要介紹了關(guān)于Sequelize連接查詢時inlude中model與association的區(qū)別,文中介紹的很詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

大家都知道在使用Sequelize進行關(guān)系模型(表)間連接查詢時,我們會通過model/as來指定已存在關(guān)聯(lián)關(guān)系的連接查詢模型,或是通過association來直接指定連接查詢模型關(guān)系。那么,兩者各應(yīng)該在什么場景下使用呢?

一、 示例準(zhǔn)備

模型定義

首先,定義User和Company兩個模型:

'use strict'

const Sequelize = require('sequelize');

// 創(chuàng)建 sequelize 實例
const sequelize = new Sequelize('db1', 'root', '111111', {logging: console.log});

// 定義User模型
var User = sequelize.define('user', {
 id:{type: Sequelize.BIGINT(11), autoIncrement:true, primaryKey : true, unique : true},
 name: { type: Sequelize.STRING, comment:'姓名' },
 sex: { type: Sequelize.INTEGER, allowNull: false, defaultValue: 0, comment:'性別' },
 companyId: { type: Sequelize.BIGINT(11), field: 'company_id', allowNull: false, comment:'所屬公司' },
 isManager: { type: Sequelize.BOOLEAN, field: 'is_manager', allowNull: false, defaultValue: false, comment:'是否管理員'}
}, 
{ charset: 'utf8',
 collate: 'utf8_general_ci'});

// 定義Company模型
var Company = sequelize.define('company', {
 id:{ type:Sequelize.BIGINT(11), autoIncrement:true, primaryKey : true, unique : true},
 name: { type: Sequelize.STRING, comment:'公司名稱' }
}, 
{ charset: 'utf8',
 collate: 'utf8_general_ci'});

// 定義User-Company關(guān)聯(lián)關(guān)系
User.belongsTo(Company, {foreignKey:'companyId'});

// sequelize.sync({force:true}).then(() => {
// process.exit();
// });

如上所示,我們定義了User和Company兩個模型,并通過belongsTo指定了User-Company之間為1:1關(guān)系。

插入數(shù)據(jù)

接下來基于剛定義的關(guān)系模型插入一些測試數(shù)據(jù):

Company.create({name:'某公司'}).then((result) => {
 return Promise.all([
 User.create({name:'何民三', sex:1, companyId:result.id, isManager: true}),
 User.create({name:'張老二', sex:1, companyId:result.id})
 ])
}).then((result) => {
 console.log('done');
}).catch((err) => {
 console.error(err);
});

二、使用model/as

在進行連接查詢時,如果已經(jīng)定義模型間的關(guān)聯(lián)關(guān)系。就可以在inlude查詢選項中,通過'model'屬性指定要連接查詢的模型,還可以通過'as'屬性指定別名。

如,從User模型中查詢一個用戶,并查詢該用戶所在的公司信息:

var include = [{
 model: Company,
 as: 'company'
}];
User.findOne({include:include}).then((result) => {
 console.log(result.name + ' 是 '+result.company.name+' 的員工');
}).catch((err) => {
 console.error(err);
});

查詢結(jié)果如下:

何民三 是 某公司 的員工

三、使用association

連接查詢時,如果要連接查詢的兩個模型間事先沒有定義連接關(guān)系,或者要使用定義之外的連接關(guān)系。這時,可以通過association來定義或重新定義模型關(guān)系。

如,查詢Company模型中的任意一個公司,并查詢該公司的管理員:

var include = [{
 association: Company.hasOne(User, {foreignKey:'companyId', as:'manager'}),
 where: {isManager:true}
}]

Company.findOne({include:include}).then((result) => {
 console.log(result.name +' 的管理員是 ' +result.manager.name);
}).catch((err) => {
 console.error(err);
});

由于Company-User之間并沒有事先定義模型關(guān)系,因此需要在inlude選項中指定連接查詢時所要使用的關(guān)聯(lián)關(guān)系。

查詢結(jié)果如下:

某公司 的管理員是 何民三

association除了用于指定之前沒有定義的模型關(guān)系,還可以用于重新用于定義模型關(guān)系。如,假設(shè)我們通過hasMany事先定義了Company-User之間存在1:N的關(guān)系。這種關(guān)系適用于查詢公司下的所有員工。而上例中,我們需要通過1:1關(guān)系來查公司的管理員,因此,這時可以通過association重新定義模型關(guān)系。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 手把手帶你安裝多個node版本

    手把手帶你安裝多個node版本

    在項目開發(fā)過程中,不同項目使用的node版本不同,有時會因為node版本過高或太低,導(dǎo)致報錯,下面這篇文章主要給大家介紹了關(guān)于安裝多個node版本的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Kubernetes Node刪除鏡像的實現(xiàn)步驟

    Kubernetes Node刪除鏡像的實現(xiàn)步驟

    本文介紹了在Kubernetes集群中如何刪除節(jié)點上的鏡像,包括連接節(jié)點、查看鏡像列表、使用Docker命令刪除鏡像以及驗證刪除結(jié)果的步驟,感興趣的可以了解一下
    2024-09-09
  • 基于Node的Axure文件在線預(yù)覽的實現(xiàn)代碼

    基于Node的Axure文件在線預(yù)覽的實現(xiàn)代碼

    這篇文章主要介紹了基于Node的Axure文件在線預(yù)覽的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 使用Node操作MySQL的兩種方式

    使用Node操作MySQL的兩種方式

    本文將介紹如何在?Node.js?應(yīng)用中使用?mysql2?和?TypeORM?兩種方式操作?MySQL?數(shù)據(jù)庫,文中通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • 通過NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    通過NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    本文介紹了GRPC和協(xié)議緩沖區(qū)的基本概念,并展示了如何在NodeJS應(yīng)用程序中使用它們,GRPC是一個高性能RPC框架,協(xié)議緩沖區(qū)則用于定義服務(wù)和序列化消息,本文給大家介紹如何在NodeJS應(yīng)用程序中使用GRPC和協(xié)議緩沖區(qū),感興趣的朋友一起看看吧
    2024-10-10
  • nodejs實現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片

    nodejs實現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片

    這篇文章主要為大家詳細介紹了nodejs實現(xiàn)截取上傳視頻中一幀作為預(yù)覽圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • node腳本實現(xiàn)自動化簽到和抽獎功能

    node腳本實現(xiàn)自動化簽到和抽獎功能

    本文主要介紹了node腳本實現(xiàn)自動化簽到和抽獎功能,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Node.jsv16 版本安裝的實現(xiàn)

    Node.jsv16 版本安裝的實現(xiàn)

    本文主要介紹了Node.jsv16 版本安裝的實現(xiàn),文中通過圖文示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • node故障定位頂級技巧動態(tài)追蹤Dynamic?Trace詳解

    node故障定位頂級技巧動態(tài)追蹤Dynamic?Trace詳解

    這篇文章主要為大家介紹了node故障定位頂級技巧動態(tài)追蹤Dynamic?Trace詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Node.js+express+socket實現(xiàn)在線實時多人聊天室

    Node.js+express+socket實現(xiàn)在線實時多人聊天室

    這篇文章主要為大家詳細介紹了Node.js+express+socket實現(xiàn)在線實時多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論