最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

一、 示例準(zhǔn)備

模型定義

首先,定義User和Company兩個(gè)模型:

'use strict'

const Sequelize = require('sequelize');

// 創(chuàng)建 sequelize 實(shí)例
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兩個(gè)模型,并通過(guò)belongsTo指定了User-Company之間為1:1關(guān)系。

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

接下來(lái)基于剛定義的關(guān)系模型插入一些測(cè)試數(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ìn)行連接查詢時(shí),如果已經(jīng)定義模型間的關(guān)聯(lián)關(guān)系。就可以在inlude查詢選項(xiàng)中,通過(guò)'model'屬性指定要連接查詢的模型,還可以通過(guò)'as'屬性指定別名。

如,從User模型中查詢一個(gè)用戶,并查詢?cè)撚脩羲诘墓拘畔ⅲ?/p>

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

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

如,查詢Company模型中的任意一個(gè)公司,并查詢?cè)摴镜墓芾韱T:

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選項(xiàng)中指定連接查詢時(shí)所要使用的關(guān)聯(lián)關(guān)系。

查詢結(jié)果如下:

某公司 的管理員是 何民三

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

總結(jié)

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

相關(guān)文章

  • express框架,報(bào)錯(cuò):“Cannot set headers after they are sent to the client”,解決方法總結(jié)

    express框架,報(bào)錯(cuò):“Cannot set headers after t

    這篇文章主要介紹了express框架,報(bào)錯(cuò):“Cannot set headers after they are sent to the client”,解決方法,結(jié)合實(shí)例形式總結(jié)分析了常見的問(wèn)題原因與對(duì)應(yīng)的解決方案,需要的朋友可以參考下
    2023-05-05
  • Nodejs中的this詳解

    Nodejs中的this詳解

    本文給大家匯總介紹了下nodejs中的this,nodejs中的this和在瀏覽器中javascript中的this還是有很大的差異的,小伙伴們可以研究下
    2016-03-03
  • 如何利用node實(shí)現(xiàn)發(fā)送QQ郵箱驗(yàn)證碼

    如何利用node實(shí)現(xiàn)發(fā)送QQ郵箱驗(yàn)證碼

    我們?cè)陂_發(fā)網(wǎng)站時(shí),發(fā)送驗(yàn)證碼的功能是必定會(huì)遇到的,下面這篇文章主要給大家介紹了關(guān)于如何利用node實(shí)現(xiàn)發(fā)送QQ郵箱驗(yàn)證碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • nodejs中express入門和基礎(chǔ)知識(shí)點(diǎn)學(xué)習(xí)

    nodejs中express入門和基礎(chǔ)知識(shí)點(diǎn)學(xué)習(xí)

    這篇文章給大家分享了關(guān)于學(xué)習(xí)nodejs中express入門和基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考下。
    2018-09-09
  • Node.js 中 morgan 依賴及基本使用詳解

    Node.js 中 morgan 依賴及基本使用詳解

    文章介紹了Node.js中`morgan`依賴的安裝、基本使用、日志格式(如`dev`、`combined`、`common`等),以及如何自定義日志格式和將日志寫入文件,感興趣的朋友一起看看吧
    2025-02-02
  • nodejs服務(wù)搭建教程 nodejs訪問(wèn)本地站點(diǎn)文件

    nodejs服務(wù)搭建教程 nodejs訪問(wèn)本地站點(diǎn)文件

    這篇文章主要為大家詳細(xì)介紹了nodejs服務(wù)搭建教程,訪問(wèn)本地站點(diǎn)文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Node+Express連接MySQL實(shí)現(xiàn)增刪改查功能

    Node+Express連接MySQL實(shí)現(xiàn)增刪改查功能

    這篇文章主要為大家詳細(xì)介紹了Node如何結(jié)合Express連接MySQL實(shí)現(xiàn)增刪改查功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-05-05
  • Node.js使用Angular簡(jiǎn)單示例

    Node.js使用Angular簡(jiǎn)單示例

    這篇文章主要介紹了Node.js使用Angular簡(jiǎn)單示例,如何在Node.js項(xiàng)目中引入AngularJS,這次提供一個(gè)非常簡(jiǎn)單的示例,演示AngularJS里的指令、數(shù)據(jù)綁定、服務(wù)等內(nèi)容。感興趣的小伙伴們可以參考一下
    2018-05-05
  • node+express制作爬蟲教程

    node+express制作爬蟲教程

    這篇文章主要介紹了node+express制作爬蟲的詳細(xì)過(guò)程和相關(guān)基礎(chǔ)知識(shí),非常的不錯(cuò),需要的朋友可以參考下
    2016-11-11
  • Nodejs全??蚣躍trongLoop推薦

    Nodejs全??蚣躍trongLoop推薦

    StrongLoop基本提供了制作一個(gè)移動(dòng)產(chǎn)品所有的框架和工具,從標(biāo)準(zhǔn)的Backend server,Devops,應(yīng)用監(jiān)控,。要想介紹完全StrongLoop的所有產(chǎn)品得寫一個(gè)長(zhǎng)篇連載了,這里只簡(jiǎn)單的瀏覽一遍。
    2014-11-11

最新評(píng)論

墨江| 大同县| 石景山区| 连城县| 额尔古纳市| 张家界市| 碌曲县| 鹿邑县| 北安市| 汉沽区| 洱源县| 留坝县| 原阳县| 额敏县| 黔西县| 阿鲁科尔沁旗| 桃江县| 夏津县| 赞皇县| 钦州市| 神池县| 汉川市| 高阳县| 岱山县| 泾源县| 潍坊市| 重庆市| 丹凤县| 南涧| 四子王旗| 安阳市| 揭阳市| 固原市| 镇安县| 云阳县| 古浪县| 秀山| 交城县| 尼玛县| 两当县| 临澧县|