天道酬勤,学无止境

sequelize.js

Cannot access Sequelize instance methods

问题 当我尝试调用在我的用户模型上定义的generateHash实例方法时,出现以下错误: User.generateHash(...).then is not a function 这是模型定义本身: const User = sequelize.define('User', { firstName: { type: Sequelize.TEXT, field: 'first_name' }, lastName: { type: Sequelize.TEXT, allowNull: false, field: 'last_name' }, userName: { type: Sequelize.TEXT, field: 'user_name', allowNull: false }, password: { type: Sequelize.TEXT, allowNull: false } }, { tableName: 'users', underscored: true, classMethods: { associate: function(models) { User.hasMany( models.Trip, { as: 'trips', foreignKey: { name: 'userId', field: 'user_id', allowNull: false }

2022-05-16 22:55:36    分类:技术分享    node.js   postgresql   sequelize.js

Sequelize: connect to database on run time based on the request

问题 我正在开发一个 node.js 应用程序,我需要连接到多个数据库。 其中一个数据库是中央数据库,其中包含所有人共有的信息。 然后是国家级数据库,根据国家/地区存储数据。 我在应用程序中使用 sequelize ORM。 数据库是postgresql。 框架很明确。 问题是我想根据要使用哪个数据库的请求来决定运行时,模型应该自动连接到适当的数据库。 我已经看到了这个问题,但没有发现它有帮助。 我还检查了另一个论坛,但没有找到任何东西。 回答1 您需要创建与每个数据库对应的对象,并且您需要在每个此对象上实例化 Sequelize。 此外,对于每个 sequelize 实例,您需要导入模型(假设所有这些数据库都具有完全相同的表和模型表示)。 import Sequelize from 'sequelize'; let connectionsArray = [ 'postgres://user:pass@example.com:5432/country1', 'postgres://user:pass@example.com:5432/country2', 'postgres://user:pass@example.com:5432/country3', ]; let country1DB, country2DB, country3DB; country1DB =

2022-05-16 09:41:15    分类:技术分享    node.js   postgresql   orm   sequelize.js   sequelize-cli

Sequelize: multiple where clause

问题 我有以下表格: 文章 - 用户 - 标签 - 关注者 - 订阅者 文章属于用户(fk:文章表中的userId) 文章可以有很多标签。 这是生成的 tagarticle 表: 这是追随者表: 和 Suscribes 表: 一个用户可以关注多个用户并订阅一个国家(payId)、一个标签或一篇文章(用于通知)。 如何查询关注用户的所有文章以及特定用户的订阅国家或标签? 回答1 我假设您询问 Sequelize 进行查询的方式。 我不确定我是否正确理解了您的问题。 您正在寻找两个查询: 查询关注用户的所有文章, 查询特定用户的订阅国家/标签/文章, 让我从模型之间的关联开始。 // in User model definition User.belongsToMany(User, { as: 'Followers', through: 'Followers', foreignKey: 'userId', otherKey: 'followId' }); User.hasMany(Subscribe, { foreignKey: 'userId' }); User.hasMany(Article, { foreignKey: 'userId' }); 通过使用上述关联,我们现在可以查询关注用户的所有文章 models.User.findByPrimary(1, { include: [

2022-05-16 07:44:04    分类:技术分享    mysql   node.js   express   sequelize.js

How to make sequelize.sync() omit some models?

问题 我在我的数据库(mysql)中使用表和视图,所以对于开发/测试环境我想使用sync(),但它在视图上崩溃。 我可以以某种方式省略这些模型吗? 回答1 当我想创建和使用带有 Sequelize 的视图时,我使用的方法与 Crusader 的答案非常相似。 在这种情况下,我不想让 Sequelize 尝试同步视图,因为它会导致创建表。 为此,我将以下内容添加到 Sequelize 模型中: var MyView = sequelize.define("MyView", { status: { type: DataTypes.TEXT }, }, { doNotSync: true, tableName: "myDatabaseView", // The actual view name in database classMethods: { createView: function(models) { return sequelize.query("CREATE OR REPLACE VIEW myDatabaseView ...;"); } }); 现在我有了这个设置,我需要确保在创建数据库时不包含视图,并且在每个视图上调用createView方法。 var tables = []; sequelize.modelManager.forEachModel(m => { if

2022-05-16 02:58:22    分类:技术分享    mysql   node.js   database   sequelize.js

How can I have a datatype of array in mysql Sequelize instance?

问题 我正在构建一个使用 Node/Express 和 MySQL 以及 Sequelize 作为 ORM 的应用程序。 我想要一个数组的数据类型,但续集文档说这仅限于 postgres。 基本上,如果我有一个包含 3 列的用户表(例如,姓名、电话、favColors),我希望 favColors 填充从用户检索到的字符串值数组。 我怎样才能做到这一点? 回答1 您可以为此使用 getter/setter 函数: favColors: { type: Sequelize.STRING, allowNull: false, get() { return this.getDataValue('favColors').split(';') }, set(val) { this.setDataValue('favColors',val.join(';')); }, } 更多信息:https://sequelize.org/master/manual/getters-setters-virtuals.html 回答2 您可以将您的字段定义为json : type: Sequelize.JSON 然后将数据保存为array

2022-05-15 22:00:21    分类:技术分享    mysql   arrays   sequelize.js

Sequelize Migration - Create Trigger in PostgreSQL

问题 我需要使用 Node 和 PostgreSQL 中的 Sequelize Migration 在我的一张表上创建触发器。 我还没有找到足够的文档。 目前我正在使用 sequelize 版本 3.23 并且非常熟悉 PostgreSQL 触发器,但无法找到有关触发器迁移的任何内容。 我正在关注 sequelize 网站上提供的与迁移相关的文档: module.exports = { up: function(queryInterface, Sequelize) { // create trigger }, down: function(queryInterface, Sequelize) { // remove trigger } } 希望我能快速解决它..在此先感谢:) 回答1 您可以将触发器添加到模型中,尽管它们称为 Hook,但它们在您的 sequelize 模型中不称为触发器。 使用钩子可能是一个更好的主意,因为您可以将它们与您的模型集成并创建实际的模型实例,但是如果您真的想使用 postgres 触发器,那么您可以像这样使用Sequelize.query() : module.exports = { up: function(queryInterface, Sequelize) { queryInterface.sequelize.query('CREATE

2022-05-15 18:38:13    分类:技术分享    node.js   postgresql   sequelize.js   database-trigger

How to set primary key type to UUID via Sequelize CLI

问题 我正在使用以下命令通过 Sequelize CLI 创建数据库模型: sequelize model:create --name User --attributes "firstname:string, lastname:string" 这将创建相应的迁移脚本: 'use strict'; module.exports = { up: function(queryInterface, Sequelize) { return queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, firstname: { type: Sequelize.STRING }, lastname: { type: Sequelize.STRING }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: function(queryInterface, Sequelize) { return

2022-05-15 13:50:20    分类:技术分享    sequelize.js   sequelize-cli

How to query many to many relationship sequelize?

问题 表有多对多的关系,由一个订单表连接。 出口 --> 订单 <-- 产品 我想获取今天订单的奥特莱斯列表。 所以这是一个获取所有网点的函数: db.Outlet.findAll({include: [ {model:db.Product, attributes: ['id', 'name', 'nameKh']} ]}).then(function(outlets){ return res.jsonp(outlets); }) 我得到了这个结果: 我只能使用 where Product Id 选择: db.Outlet.findAll({include: [ {model:db.Product, attributes: ['id', 'name', 'nameKh'], where: {id: 2} ]}).then(function(outlets){ return res.jsonp(outlets); }) 如何查询具体的订单金额,或今天的订单日期? 这是我的模型: 出口: var Outlet = sequelize.define('Outlet', { outletCode: DataTypes.STRING, outletName: DataTypes.STRING, outletNameKh: DataTypes.STRING, outletSubtype

2022-05-14 18:36:12    分类:技术分享    javascript   mysql   node.js   sequelize.js

What does 'separate' in sequelize mean?

问题 我在 sequelize 的官方文档中搜索,找不到任何关于“ separate ”的条目。https://readthedocs.org/search/?q=separate 我也在谷歌上搜索过,但没有成功。 db.fooTable.find({ where: { id: id }, include: [{ model: db.barTable1, separate: true }, { model: db.barTable2, separate: true }, { model: db.barTable3, separate: true }] }) 为了找出它的含义,我将' separate '设置为false,但查询的结果与我设置' true '时的结果相同。 回答1 我在当前代码中发现了这一点: 如果为 true,则运行单独的查询以获取关联的实例,仅支持 hasMany 关联 详细说明:默认情况下,为了检索相关模型实例,Sequelize 将使用 SQL JOIN。 通过启用separate ,Sequelize 将为每个关联模型执行单独的查询,并在代码中连接生成的文档(而不是让数据库执行连接)。 假设我的Product模型与Tag模型有一个hasMany关联( “一个产品可以有很多与之关联的标签” )。 这是“常规”查询: SELECT `product`.`id`

2022-05-14 11:48:04    分类:技术分享    sequelize.js

Sequelize return array with Strings instead of Objects

问题 有时我只想从多行中选择一个值。 让我们想象一下我有一个看起来像这样的帐户模型: 帐户 ID 姓名年龄 我只想选择名称。 你会写这样的东西: AccountModel.findAll({ where: { Age: { $gt : 18 } }, attributes: ['Name'], raw : true }); 但这将返回一个带有对象的数组。 [{Name : "Sample 1"}, {"Name" : "Sample 2"}] 我想得到一个只有这样名字的数组: ["Sample 1", "Sample 2"] 是否可以通过 Sequelize 实现这一目标? 我已经搜索了文档但找不到它。 回答1 使用 Sequelize 3.13.0 似乎不可能让find返回值的平面数组而不是对象数组。 您的问题的一种解决方案是使用下划线或 lodash 映射结果: AccountModel.findAll({ where: { Age: { $gt : 18 } }, attributes: ['Name'], raw : true }) .then(function(accounts) { return _.map(accounts, function(account) { return account.Name; }) }) 我已经上传了一个在这里演示的脚本。 作为快速说明

2022-05-12 08:31:27    分类:技术分享    sql-server   sequelize.js