Tag: sequelize.js

在续集种子中findlogging

我一直在试图为我的项目写一些种子,但是我遇到了一些麻烦。 我与我的users和roles表有着many-to-many关系。 所以,当我播种数据库时,我需要添加一个正确的ID到我的连接表的logging。 为了做到这一点,我需要find用户通过email和angular色的name并得到ids ,这就是问题所在。 我无法在续集网站上find任何好的文档。 我正在使用sequelize-cli来播种和迁移东西。 我作为一个参数queryInterface ,但我找不到任何示例或提到什么事情可以实际上做。 只是一些简单的例子,让我通过迁移(以某种方式),我能在谷歌find。 我已经通过使用“脏伎俩”来解决这个问题了。 // user_seeds.js up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert(table, [{ id: 1, name: 'John doe', email: 'john@doe.com', created_at, updated_at }], {}); // roles_seeds.js up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert(table, [{ id: 1, name: 'admin', created_at, updated_at }, { id: 2, name: 'user', created_at, […]

Sequelize hasOne Relationship association方法不是函数吗?

我正在使用Node和Sequelize ORM的后端。 正在使用的数据库是PostgreSQL。 我之前在代码中使用了hasOne() ,并且它非常createAssociation() ,之前使用hasOne()关系的所有createAssociation() , getAssociation()方法hasOne()工作。 然而,由于某种原因,现在给我一个问题。 index.js const Connection = new Sequelize( 'postgres', 'postgres', null, { dialect: 'postgres', host: '192.168.99.100', port: '5432', } ); const ModelSeven = Connection.define('modelSeven', ModelSevenSchema), ModelFive = Connection.define('modelFive', ModelFiveSchema), ModelOne = Connection.define('modelOne', ModelOneSchema), ModelSix = Connection.define('modelSix', ModelSixSchema), ModelThree = Connection.define('modelThree', ModelThreeSchema), ModelFour = Connection.define('modelFour', ModelFourSchema), ModelOne.hasOne(ModelThree); // Defines […]

Sequelize – 级联删除3个表

我试图级联删除数据通过3关联的表中sequelize。 我创build的模型如下。 用户型号: var Sequelize = require('sequelize'); module.exports = function(sequelize, DataTypes) { var Users = sequelize.define('Users', { id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true }, name: { type: DataTypes.STRING, allowNull: false }, createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, updatedAt: DataTypes.DATE }, { classMethods: { associate: function(models) { Users.belongsToMany(models.Books, { through: { […]

基于关系的节点js中的ACL

我试图在Node js中实现某种权限框架,使用sequelize作为ORM(与Postgres)。 经过几个小时的研究,我能find的与现有npm模块做的最接近的事情是使用acl和acl sequelize来支持我的堆栈。 问题是,它看起来像acl模块分配一个angular色,该angular色将获得一组权限到特定资源的所有实例 。 但是,我需要根据该用户的现有关系对实例进行权限许可。 作为一个例子,考虑一个简单论坛的权限系统。 它为每个angular色提供这些权限: // allow guests to view posts acl.allow("guest", "post", "view"); // allow registered users to view and create posts acl.allow("registered users", "post", ["view", "create"]); // allow administrators to perform any action on posts acl.allow("administrator", "post", "*"); 假设我也想为注册用户添加编辑他们自己post的function,并且用户与他们创build的所有post有关系。 有没有办法让这个模块做到这一点,或任何其他模块,可以在数据库/ ORM级别上支持这种行为? 如果没有,我必须实现一个自定义的,最好的方法来创build这样的东西。

通过中间模型加紧加载

我有3个模型: ModelA,ModelB和ModelC ModelA属于多个ModelB(n:m) ModelB属于多个ModelA(m:n) ModelB属于ModelC(n:1) ModelC有许多ModelB(1:n) 我需要获得ModelA的所有ModelC(通过ModelB) 我相信是这样的,但我不能得到它的工作,当一个through续集创build协会创造怪异foreignKeys和关于这个话题的续集文件是非常不完整的,我的味觉 ModelA.findOne({ where: …, include: [ { model: ModelC, through: … } ] }); 编辑:我改变了所有的实体模型A,B,C,因为这是一个关于Sequelize API的问题/问题; 不是关于数据库/模型devise

在sequelize getter方法中的asynchronous表查询

我有一个执行数据库查询的sequelize实例方法: getPropertyDays() { const queryString = ` SELECT state FROM property_days WHERE DATE(day) = CURDATE() AND property_id = :propertyId;`; const replacements = {propertyId: this.id}; return this.sequelize.query(queryString, {replacements: replacements, type: sequelize.QueryTypes.SELECT}); }, 被getter调用: getterMethods: { propertyState() { var self = this; const blockedDay = 'x'; const unavailableDay = 'u'; this.getPropertyDays().then(function(result) { var state = result[0]['state']; if […]

Sequelize-创build一个instarnce后不返回承诺

我正在尝试创build新的filter并打印(console.log)刚刚创build的对象的id,但它不会进入.then函数。 代码如下: var Sequelize = require('sequelize'); var FilterModel = require('../models/filters'); var Filter = new FilterModel(Database, Sequelize); Filter.create({ name: data.filter_name }).then(function(filter) { console.log( '***************************************' ); }); 而'**'没有打印,但是input在DB中。 当我试图这样做: var filter = Filter.create({ name: data.filter_name }) 并打印“filter”我已经与created_at等新的实例,但ID为NULL。 该id定义为: id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, 请有人可以帮助这里有什么问题吗? 谢谢!

Sequelize如何插入更新多行?

我尝试用Sequelize在我的数据库中插入多行,但由于违反了一些约束,for循环卡住了。 let dataset = [ ["2016-01-01","987"], ["2016-01-02","987"], ["2016-01-03","987"], ["2016-01-04","987"], ["2016-01-05","987"], ["2016-01-06","987"], ["2016-01-07","987"], … ]; for(let row of dataset) { model.findOrCreate({ where: {date_prc: row[0]}, defaults: {value: row[1]} }); } 当我查看SQL日志时,它正在检查date是否已经插入,如果没有,它正在尝试插入该行。 但是,在某些情况下,而不是插入缺less的date行,它插入下一个date。 例如在我看到的日志中: select 2016-01-03 // this one is missing select 2016-01-04 // this one is not missing insert 2016-01-04 // it is inserting 2016-01-04 instead of […]

如何在没有加载关联对象的情况下通过关联查询sequelize?

我有多个模型相互关联。 例如: var User = sequelize.define("user") var Project = sequelize.define("project") Project.hasMany(User) 现在我想查询包含特定用户的所有项目。 例如: Project.findAll({ include: [ { model: User, where: { id } } ] }) 这工作,但也加载用户,并将其附加到项目。 我怎么能说sequelize,用户不应该被添加到find的项目?

在sequelize和pg之间共享数据库连接池

我有一个我用Express和node-postgres (pg)编写的服务器。 它创build自己的数据库池: const dbPool = new pg.Pool(dbConfig); 并使用此连接直接运行SQL查询。 现在我添加一个新表和相应的REST API。 我想用续集和结尾来减less样板。 不幸的是,sequelize想要创build自己的数据库连接池: const sequelize = new Sequelize(database, user, password, config); 是否有可能重新使用现有的连接池,或在我现有的pg代码和我的新的sequelize代码之间分享?