Articles of sequelize.js

如何build模一对多关联的续集?

我是新来的Sequelize,我试图弄清楚,我应该如何build模一对多的关系。 我的问题如下:一个学期,很多论文。 var Term = sequelize.define( 'Term', … ); var Paper = sequelize.define( 'Paper', … ); 我们假设我有一个术语。 每学期可以有很多论文,我想为我的任期添加/删除论文。 我也想拿到所有期限的文件。 var term; … term.getPapers( … ); term.setPapers( … ); term.addPaper( paper ); term.removePaper( paper ); 现在,我们假设我有一个文件。 我想为我的论文设定一个期限。 var paper; … paper.getTerm(); paper.setTerm(); 如何使用sequelize来实现? 我一直在研究文档几个小时,也在网上寻找一些胶水,但没有任何结果。 我发现这样的联系在续集中logging的很差(一对一,多对多更好)。 更新 : 好吧,几个小时后,我研究了它是如何工作的: Term.hasMany( Paper, { as: 'papers' } ); Paper.hasOne( […]

使用SeqelizeJS编写与外键迁移

的背景 我正在用SequelizeJS构build一个受欢迎的NodeJS ORM项目。 在devise一个模式时,似乎有两种风格: 创build模型代码并使用.sync()函数为模型自动生成表格。 创build模型代码并使用QueryInterface和umzug编写手动迁移 。 我的理解是,#1对于快速原型devise来说更好,但对于期望随着时间的推移,生产数据需要能够经历迁移的项目而言,#2是最佳实践。 这个问题涉及策略#2。 问题(S) 我的表具有必须通过外键反映的关系。 如何通过Sequelize QueryInterface创build具有外键关系的表格? sequelize需要哪些列和帮助表? 例如,看起来像createdAt或updatedAt这样的特定列是预期的。

NodeJS中的后缀:内部JOIN实现失败

我有三个表承包商,这两个项目和连接表project_contractors和我创build模型,并写下如下关系, Contractor.hasMany(Project, {joinTableName: 'projects_contractors'}) Project.hasMany(Contractor, {joinTableName: 'projects_contractors'}) 我想访问这个基于承包商的项目意味着内部联接。 核心查询:从承包商selectc.id,c.name,p.id,p.name c内部联接projects_contractors pc上c.id = pc.contractor_id内部联接项目p上p.id = pc.project_id 我在执行下面的代码时失败了。 “required”是一个关键字,用于内部JOIN,但如果我们保留,则不起作用。 Contractor.findAll({ include: [Project, {required: false}]}).success(function(list){ console.log("hi") res.send(204) }) 如果不需要,它会在项目和承包商上创build一个左外部JOIN。 build议我为上述senario示例。

passport.deserializeUser为每个HTTP请求执行一个DB(sequelize)命令

我使用sequelize作为ORM和passport.js(passport-local)进行身份validation。 我注意到每个HTTP请求都会产生一个单独的数据库命令。 我开始看deserializeUser()函数。 当加载一个单一的页面,这是我得到的: 执行:SELECT * FROM Users WHERE Users 。 id = 1 LIMIT 1; 一遍一遍又一遍! GET / 200 12ms – 780 执行:SELECT * FROM Users WHERE Users 。 id = 1 LIMIT 1; 执行:SELECT * FROM Users WHERE Users 。 id = 1 LIMIT 1; 一遍一遍又一遍! GET /js/ui.js 304 4ms 一遍一遍又一遍! GET /stylesheets/main.css […]

无法从sequelize中的select语句中排除关联的字段

我有以下代码(简化): var group = sequelize.define("group", { id: {type: DataTypes.INTEGER, autoIncrement: false, primaryKey: true}, name: type: DataTypes.STRING, parentId: DataTypes.INTEGER }, { classMethods: { associate: function (models) { group.belongsToMany(models.item, { as:'items', foreignKey: 'group_id', through: models.group_item_tie }); }} }); var group_item_tie = sequelize.define("group_item_tie", {}, {freezeTableName: true}); var item = sequelize.define("item", { spn: { type: DataTypes.INTEGER, autoIncrement: false, primaryKey: […]

GraphQL查询与表连接

我正在学习GraphQL所以我build立了一个小项目。 比方说,我有2个模型, User和Comment 。 const Comment = Model.define('Comment', { content: { type: DataType.TEXT, allowNull: false, validate: { notEmpty: true, }, }, }); const User = Model.define('User', { name: { type: DataType.STRING, allowNull: false, validate: { notEmpty: true, }, }, phone: DataType.STRING, picture: DataType.STRING, }); 关系是1:很多,用户可以有很多评论。 我已经build立了这样的架构: const UserType = new GraphQLObjectType({ name: 'User', fields: () […]

使用Sequelize进行多对多关系的简单示例

我正在尝试使用Sequelize构build表之间多对多关系的简单示例。 不过,这似乎比我预料的要棘手。 这是我目前的代码( ./db.js文件导出Sequelize连接实例)。 const Sequelize = require("sequelize"); const sequelize = require("./db"); var Mentee = sequelize.define('mentee', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: Sequelize.STRING } }); var Question = sequelize.define('question', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, text: { type: Sequelize.STRING } }); var MenteeQuestion = […]

如何在Sequelize ORM中插入PostGIS几何点?

我想在Sequelize.js ORM中有一个几何列的表中插入一行。 我有纬度,经度和高度,需要先将它转换为一个点,然后才能将其作为几何体插入。 执行转换的PostGIS存储过程是 ST_MakePoint( longitude, latitude, altitude ) 插入一行我正在使用sequelize model.create函数 models.Data.create({ location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function? speed: request.params.spd, azimuth: request.params.azi, accuracy: request.params.acc }); 现在我想要做的是当我插入字段location返回"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"该行。 我怎样才能做到这一点?

续集classMethods vs instanceMethods

所以开始我所有的事情冒险的节点。 我想学习的工具之一是Sequelize。 所以我会开始我想做的事情: 'use strict'; var crypto = require('crypto'); module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', { username: DataTypes.STRING, first_name: DataTypes.STRING, last_name: DataTypes.STRING, salt: DataTypes.STRING, hashed_pwd: DataTypes.STRING }, { classMethods: { }, instanceMethods: { createSalt: function() { return crypto.randomBytes(128).toString('base64'); }, hashPassword: function(salt, pwd) { var hmac = crypto.createHmac('sha1', salt); return hmac.update(pwd).digest('hex'); }, authenticate: […]

在Sequelize事务中使用循环和promise

我目前正在构build一个Nodejs,Express,Sequelize(w。PostgreSQL)应用程序,并且遇到了一些使用promise和transaction和loops的问题。 我想弄清楚如何在事务中使用for循环。 我试图通过成员列表循环,并在数据库中为每个成员创build一个新的用户。 我知道下面的代码是错误的,但它显示了我正在尝试做什么。 任何人都可以指向正确的方向吗? var members = req.body.members; models.sequelize.transaction(function (t) { for (var i = 0; i < members.length; i++) { return models.User.create({'firstname':members[i], 'email':members[i], 'pending':true}, {transaction: t}).then(function(user) { return user.addInvitations([group], {transaction: t}).then(function(){}).catch(function(err){return next(err);}); }) }; }).then(function (result) { console.log("YAY"); }).catch(function (err) { console.log("NO!!!"); return next(err); });