2013-12-08 43 views
0

你好,我試圖用node-orm2與多對多節點聯繫起來。nodejs orm多對多

我有這個表:

  • project - > ID,名稱
  • user - > ID,名稱
  • 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'); 
    } 

我怎樣才能做到這一點,我很困惑,我readed的文件,但我不明白這一點。

回答

0

對node-orm也有一些問題... 您可以使用light-orm或bookshelf.js來完成。

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

在光ORM,你可以簡單地用這樣的複雜要求延長模型