Articles of sequelize.js

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" […]

如何处理先调用sequelize.sync()?

我在nodejs中开发有点新,所以这可能是一个简单的问题。 我正在build立一个典型的Web应用程序基于快递+续订。 我在内存中使用sqlite,因为我现在只是原型。 我明白,如果我要使用持续的sqlite文件,这可能不是一个问题,但这不是我目前的目标。 考虑以下: var User = sequelize.define("User", { "username": DataTypes.STRING, // etc, etc, etc }); sequelize.sync(); User.build({ "username": "mykospark" }); 起初,我在User.build()方面得到了关于Users表不存在的错误。 我意识到sequelize.sync()被称为asynchronous,插入发生在表创build之前。 然后,我重新安排我的代码,以便User.build()调用是在sequelize.sync()。complete()修复问题,但我不知道如何将其应用到我的项目的其余部分。 我的项目在一堆不同的地方使用模型。 这是我的理解,我只是想在我的模型定义后调用sequelize.sync()一次,然后他们可以自由使用。 我可能会find一些方法来阻止整个nodejs应用程序,直到sequelize.sync()完成,但这似乎不是好的forms。 我想我可以将每一个模型操作包装到sequelize.sync()。complete()调用中,但是这看起来不正确。 那么人们通常如何处理呢?

用大整数串起js

我有一个应用程序写在节点JS和使用Sequelize JS ORM库来访问我的数据库是MySql。 我的问题是,我的数据库中有一列是BIGINT,当它的值很大时,我检索到错误的值。 例如当数据库中的值是: 10205918797953057我得到10205918797953056当我得到它使用sequelize。 我尝试使用big-integer库,但我没有运气。 欢迎任何意见。 PS:我无法将数据types更改为VARCHAR。

Sequelize hasMany通过另一个表

好的,我有以下三种models 模块: var Module = sequelize.define('module', { id: DataTypes.INTEGER, name: DataTypes.STRING, description: DataTypes.STRING, category_id: DataTypes.STRING, module_type_id: DataTypes.STRING, gives_score: DataTypes.INTEGER, duration: DataTypes.STRING, price: DataTypes.STRING }, { freezeTableName: true} ) 权限: Competence = sequelize.define('competence', { id: DataTypes.INTEGER, name: DataTypes.STRING, organization_id: DataTypes.INTEGER, competence_type_id: DataTypes.INTEGER },{freezeTableName:true}) Module_has_competence: Module_has_competence = sequelize.define('module_has_competence', { id: DataTypes.INTEGER, module_id: DataTypes.INTEGER, competence_id: DataTypes.INTEGER, score: DataTypes.STRING […]

sequelize.define错误:在nodejs中没有方法“define”

这是我pipe理所有数据库模型的managedb.js: var Sequelize = require('sequelize-postgres').sequelize var postgres = require('sequelize-postgres').postgres var db = new Sequelize('testdb', 'postgres', 'postgres', { dialect: 'postgres' }) var models = [ 'user' ]; models.forEach(function(model) { module.exports[model] = db.import(__dirname + '/' + model); }); exports.db = db; 这是我的user.js var sequelize = require("sequelize"); var seq = require("./managedb"); var db = seq.db; var Project = […]

Sequelize.js – 在“创build”或“build立”调用期间的模型关联

我有一个需要关联/外键的数据模型。 有没有办法在模型创build过程中强制执行这个约束,而不会陷入鸡/蛋的情况? 比方说,我有一个User类,它需要至less有一个device与它关联。 同样,该device必须属于一个用户。 像这样的东西(未经testing的代码,不介意语法错误): User = db.define("user", { name: Sequelize.STRING }) Device = db.define("device", { uuid: Sequelize.STRING }) User.hasMany(Device) 我想确保在首次调用create时,我拥有所有Device信息以及所有User信息。 保持“胖模型,瘦控制器”我想把这个到我的模型。 有没有可能做这样的事情? user = User.create( name: "jesse" device: uuid: "84e824cb-bfae-4d95-a76d-51103c556057" ) 我可以重写create方法吗? 还是有一些types的保存事件钩我可以使用?