Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js的哪个ORM?_Javascript_Mysql_Node.js_Orm - Fatal编程技术网

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)
  • 从数据库生成模型的命令行工具
我测试过:

  • 节点orm
    • 要处理自己的列名,需要解决方法
    • 不支持软删除,即使使用外部插件也不支持软删除(我尝试使用beforeRemove钩子编写一个,但我可以“阻止”它删除记录)
    • 不支持每个文件的模型(您需要解决方法)
  • 续集
    • 不要创建外键
    • 无法将属性映射到列名
    • 支持每个文件一个模型,但效果不太好(需要将关系放入包含模型的文件中)
  • 节点持久化
    • 我不喜欢为所有内容指定连接实例

  • 现在我要测试JugglingDB和Bookshelf.js(但我不太喜欢最后一个)。Bookshelf目前应该支持所有这些:

  • 使用 和 方法
  • 将不同的表名与 属性
  • 时间戳可以使用 属性
  • 外键可以用 架构生成器。。。它们没有很好的文档记录,但你可以 请参见测试中的示例
  • 支持mysql、sqlite和postgres
  • 绝对支持每个文件一个模型。。。这些关系在方法中定义,因此您可以执行以下操作:

    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分页的最佳方式有任何建议。谢谢,这是我的帖子: