Javascript node.js的哪个ORM?
我知道这是一个常见的问题,但我已经做了测试,我需要一些特殊的功能 我需要的功能包括:Javascript node.js的哪个ORM?,javascript,mysql,node.js,orm,Javascript,Mysql,Node.js,Orm,我知道这是一个常见的问题,但我已经做了测试,我需要一些特殊的功能 我需要的功能包括: 将属性映射到列名 使用与模型名称不同的表名称 支持软删除(sequelize上的偏执模式) 支持记录时间戳(能够为每个不同的模型指定列名) 支持外键 必须支持mysql和sqlite 体系结构必须支持每个文件的模型 可选功能: 缓存(支持redis/memcache) 从数据库生成模型的命令行工具 我测试过: 节点orm 要处理自己的列名,需要解决方法 不支持软删除,即使使用外部插件也不支持软删除(我
- 将属性映射到列名
- 使用与模型名称不同的表名称
- 支持软删除(sequelize上的偏执模式)
- 支持记录时间戳(能够为每个不同的模型指定列名)
- 支持外键
- 必须支持mysql和sqlite
- 体系结构必须支持每个文件的模型
- 缓存(支持redis/memcache)
- 从数据库生成模型的命令行工具
- 要处理自己的列名,需要解决方法
- 不支持软删除,即使使用外部插件也不支持软删除(我尝试使用beforeRemove钩子编写一个,但我可以“阻止”它删除记录)
- 不支持每个文件的模型(您需要解决方法)
- 不要创建外键
- 无法将属性映射到列名
- 支持每个文件一个模型,但效果不太好(需要将关系放入包含模型的文件中)
- 我不喜欢为所有内容指定连接实例
现在我要测试JugglingDB和Bookshelf.js(但我不太喜欢最后一个)。Bookshelf目前应该支持所有这些:
var Classroom = Bookshelf.Model.extend({
tableName: 'classrooms',
student: function() {
// Relating to a model from a file in the same directory.
return this.hasMany(require('./student'));
}
});
new Classroom({id: 1})
.fetch({withRelated: ['students'])
.then(function(classroom) {
console.log(JSON.stringify(classroom));
});
destroy: function(options) {
if (options.softDelete) {
return this.save({'deleted_at': new Date});
}
return bookshelf.Model.prototype.destroy.call(this, arguments);
}
它还没有挂接到缓存中,因为关系上的缓存无效化是相当棘手的,肯定是正在考虑的事情
如果您看到任何似乎丢失的内容,请随时打开票证。您可以查看灯光:
简单的ORM。不要创建外键。无法将属性映射到列名。但是可以连接到任何rdbms,而且非常简单。我认为您现在不会找到任何接近Hibernate/Doctrine for Node的东西:(sequelize看起来不错,有一些解决方法,记住这不是PHP,大多数时候事情都太异步了,所以将它与async.js混合使用,我相信你会得到一个结果。@GeoPhoenix这个问题与PHP或async vs.Sync完全无关,重点是我在寻找一个好的ORM:)这篇文章应该可以帮助你:列名的属性更像是缺少功能的一个解决方法,我不想指定扩展每个模型来处理解析和格式,它基本上不支持FK(如果我需要自己使用knex、与Bookshelf.js捆绑在一起或与其他东西一起使用,这是毫无意义的……定义两个表之间的关系应该用FK来处理[在大多数情况下]),最后,它非常冗长(在方法中定义关系并指定提取的相关内容根本不好)请注意我对MySQL的体验,我使用过waterline、node-orm2、sequelize和bookshelf。bookshelf是迄今为止最好的体验,因为它有很好的文档、简单的模型和易于实现。您好,我已经使用bookshelf几个月了,我很喜欢使用它。您构建的解决方案非常好在此。我尝试使用Bookshelf pagemaker模块为我的书架查询获取分页。我能够获得基本分页。但没有看到如何为查询提供WHERE子句。我想知道您是否对使用Bookshelf分页的最佳方式有任何建议。谢谢,这是我的帖子: