0

您好,我正在尝试使用node-orm2.

我有这个表:

  • project--> 身份证,姓名
  • user--> 身份证,姓名
  • 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');
    }

我该怎么做我很困惑,我阅读了文档,但我不明白这一点。

4

1 回答 1

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

于 2014-01-28T13:38:22.043 回答