Tag: sequelize.js

在Sequelize模型钩子函数中访问其他模型

我试图创build一个模型钩子,当主模型已经创build时自动创build一个关联的logging。 当我的模型文件结构如下时,如何在钩子函数中访问我的其他模型? /** * Main Model */ module.exports = function(sequelize, DataTypes) { var MainModel = sequelize.define('MainModel', { name: { type: DataTypes.STRING, } }, { classMethods: { associate: function(models) { MainModel.hasOne(models.OtherModel, { onDelete: 'cascade', hooks: true }); } }, hooks: { afterCreate: function(mainModel, next) { // ———————————— // How can I get to OtherModel here? // […]

不同的架构模型关联Sequelize.js和MySQL

我有两个MYSQL模式,他们必须一起工作。 IE:“user”表位于模式“a”中,“profile”表位于模式“b”中。 configuration文件 – >有很多用户 用户 – >属于configuration文件 在Sequelize js中通过这种方式定义以不同模式生活的两个模型之间的关联是否可行? // after define the models .. Profile.hasMany(User); User.belongsTo(Profile); // get the profile of the user(from the b schema) User.find(1).success( function(user) { console.log(user.getProfile()); }); 这将工作? 我应该如何定义不同模式的模型?

如何在Unicodestring的SQL语句之前添加N后缀?

我是Sequelize.js和Node.js的新手,我们的后端数据库是SQL Server 2014,所以我们使用Sequelize.js作为ORM层,我们需要处理数据中的非英文字符。 当我尝试使用sequelize创build方法来插入非英文字符,我只得到??? 在DB中,debugging后我发现原因如下,但是我不知道有没有什么好的解决方法来修复它。 下面是我在应用程序中创build的一个testing模型,我将使用sequelize.import方法生成表模式,然后调用fillTestData方法将testing数据插入数据库,然后调用数据库服务器的同步,但是我只获得很多'????' 在数据库表中。 var Promise = require("sequelize").Promise; module.exports = function(sequelize, DataTypes) { var Test = sequelize.define("Test", { ID: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, Name: { type: DataTypes.STRING(255), allowNull: true } }, { charset: "utf8", classMethods: { fillTestData: function(models) { return Promise.join( Test.create({Name: "hello"}), Test.create({Name: "aello"}), Test.create({Name: "Aello"}), Test.create({Name: […]

节点j的模式和数据迁移

有什么工具类似于Django Souh ,但是对于Node? Noe我正在与Sequelize合作,如果我没有错,Sequelize没有select根据现有模型创build迁移文件。 所以,创build一个新的模型/表格的步骤是: 用sequelize model:create <model meta> 。 编辑生成的迁移文件 – 添加实际代码,用于在数据库下创build表格。 使用sequelize db:migrate运行sequelize db:migrate 。 我正在寻找能够创build基于现有模型的迁移文件的东西,类似于南方可以为Django所做的那样。 有什么select吗?

Sequelize findOrCreate给我一个SequelizeUniqueConstraintError:validation错误

所以我试图将多个集合请求链接在一起 – 检查数据库中是否存在授权。 然而,当我使用sequelize findOrCreate方法时,我得到一个SequelizeUniqueConstraintError:validation错误,我不明白为什么。 这是我的基金模式。 module.exports = function(sequelize, DataTypes) { var Fund = sequelize.define("funds", { id: { type: DataTypes.INTEGER, field: 'id', primaryKey: true, unique: true, autoIncrement: true, }, title: { type: DataTypes.TEXT, field: 'title' }, tags: { type: DataTypes.ARRAY(DataTypes.TEXT), field: 'tags' }, minimum_age: { type: DataTypes.INTEGER, field: 'minimum_age' }, maximum_age: { type: DataTypes.INTEGER, field: […]

Sequelize :: Limit和Order INSIDE包含构造

我有以下模型层次结构: User.hasMany(Child); Child.hasMany(Profile); 一旦我加载了一个User对象,我需要根据以下逻辑加载它的Children对象及其关联的Profiles : 为User加载所有Children ,按namesorting。 对于每个Child ,加载按idsorting的前三个Profiles 。 有没有办法限制和sorting急切加载的Profiles ? 我可以限制和sorting的Children但不是Profiles 。 user.getChildren({ limit: 10, order: [['name', 'ASC']], include: [{ model: Profile, limit: 3, <– HAS NO EFFECT!!! order: [['id', 'DESC']] <– HAS NO EFFECT!!! }] }); 我能做到这一点的唯一方法就是做以下工作: user.getChildren({ limit: 10, order: [['name', 'ASC']] }).then(function(children) { user.children = children; _.each(children, function(child) { child.getProfiles({ […]

在续集是有可能使用嵌套预加载分页嵌套请求?

我正在使用嵌套的热切加载 funcionality,这是一个续集的例子: User.findAll({ include: [{ model: Tool, as: 'Instruments', include: [{ model: Teacher, where: { school: "Woodstock Music School" }, required: false }] }] }).then(function(users) { /* … */ }) 想象一下,你想要做一个endpoint “总结”,你想包括Teacher model ,但只有前三个结果 有可能只使用嵌套的预先加载? Sequelize提供了一种方法来达到这个目的?

MySQL的ORM的Node.js选项

我想创build一个node.js和基于MySQL的应用程序。 Google和Stack Overflow为Javascript ORM提供了很多选项: sequelize.js persistence.js 吃水线 knex.js 节点ORM2 bookshelf.js objection.js 但是,我找不到一个支持子查询,联接,转换,存储过程的完美ORM,与MySQL集群兼容,并且具有良好的文档和社区支持。 还有其他的select吗? 在作出决定时应考虑哪些因素?

无法更新的Sequelize列

是否有可能使用Sequelize在MySQL表上创build一个列,可以在创build新行时初始化,但从未更新? 例如,REST服务允许用户更新他的个人资料。 他可以改变任何领域,除了他的id 。 我可以从APIpath上的请求中id ,但这有点多余,因为有许多不同的模型行为相似。 理想情况下,我希望能够在Sequelize中定义一个约束,以防止将id列设置为DEFAULT以外的任何其他值。 目前,我使用id的setterMethod手动抛出一个ValidationError ,但这似乎是hackish,所以我想知道是否有一个更干净的方式做到这一点。 更糟糕的是,这个实现仍然允许在创build新logging时设置id ,但是我不知道解决方法,因为Sequelize生成查询时会调用setterMethods.id将值设置为DEFAULT 。 return sequelize.define('Foo', { title: { type: DataTypes.STRING, allowNull: false, unique: true, validate: { notEmpty: true } } }, { setterMethods: { id: function (value) { if (!this.isNewRecord) { throw new sequelize.ValidationError(null, [ new sequelize.ValidationErrorItem('readonly', 'id may not be set', 'id', value) ]); } […]

使用Sequelize如何指定要sorting/限制的字段?

我的查询是: db.Question.findAll where: id: $notIn: if questionIds.length > 0 then questionIds else [-1] TopicId: topicCount.id PassageId: null status: 'active' level: $lte: startLevel $gte: endLevel include: [ model: db.Answer ] order: [db.Sequelize.fn 'RANDOM'] limit: questionSections[sectionIndex].goal * 2 那生成以下查询: SELECT "Question".*, "answers"."id" AS "Answers.id", "answers"."answertext" AS "Answers.answerText", "answers"."iscorrect" AS "Answers.isCorrect", "answers"."createdat" AS "Answers.createdAt", "answers"."updatedat" AS "Answers.updatedAt", "answers"."questionid" […]