nodejs orm很多很多

时间:2013-12-08 12:49:20

标签: node.js node-orm2

您好我尝试使用node-orm2在节点中执行多对多的关联。

我有这张表:

  • project - > id,name
  • user - > id,name
  • user_project - > user_fk,project_fk(这是多对多关联表)

控制器返回一个用户列表和一个项目列表,但我需要返回另一个属性,包含每个用户的项目和每个项目的用户。

型号:

module.exports = function (orm, db) {
    var Project = db.define('project', {
            name     : { type: 'text', required: true }
        },
        {
            methods: {
                serialize: function () {
                    return {
                        id        : this.id,
                        name     : this.name
                    };
                }
            }
        });
};


module.exports = function (orm, db) {
    var User = db.define('user', {
            name     : { type: 'text', required: true },
            email     : { type: 'text', required: true }
        },
        {
            methods: {
                serialize: function () {
                    return {
                        id        : this.id,
                        name     : this.name,
                        email     : this.email
                    };
                }
            }
        });
};

控制器:

module.exports = {

    list: function (req, res, next) {

        req.models.project.find().limit(4).order('-created').all(function (err, messages) {
            if (err) return next(err);

            var projects = messages.map(function (m) {
                return m.serialize();
            });
            console.log(projects);
        });

        req.models.user.find().limit(4).order('-created').all(function (err, messages) {
            if (err) return next(err);

            var users = messages.map(function (m) {
                return m.serialize();
            });
            console.log(users);
        });
        res.sendfile(settings.path + '/public/index2.html');
    }

我怎么能这样做我很困惑,我引用了文档,但我不明白这一点。

1 个答案:

答案 0 :(得分:0)

还有node-orm的一些问题...... 你可以使用light-orm或bookshelf.js。

在light-orm中,您可以简单地使用如下复杂请求扩展模型:

var SiteCollection = new ORM.Collection({
    connector: ORM.driver,
    tableName: 'site',
    modelExtension: {
        getAds: function(callback) {
            var query = "SELECT DISTINCT `ads`.* FROM `ads` INNER JOIN `siteads` " +
                "ON `ads`.`id` = `siteads`.`ads_id` " +
                "WHERE site_id = " + this.get('id');
            ORM.Collections.AdsCollection.find(query, callback);
        },
        renderAds: function(callback) {
            var that = this;
            this.getAds(function(err, ads) {
                var html = ejs.render(adsTemplate, {
                    content: new ORM.Collection(ads).toJSON()
                });
                fs.writeFileSync(writeDir + that.get('id') + ".html", html, {
                    encoding: 'utf8'
                });
                callback();
            });
        }
    }
});

试一试:https://npmjs.org/package/light-orm