nodejs / loopback:定义关系似乎没有反映在数据库中?

时间:2015-07-31 01:13:46

标签: node.js relationship loopbackjs

我正在使用strongloop loopback创建一个API。

我已经定义了我的模型,基本上一切都很好。 但是我在理解环回如何处理关系时遇到了问题。

并非我所定义的所有关系似乎都真正反映在数据库和界面中。

例如,我有一个模型public Mob(Level lvl, String nm, int x, int y, int spd) { super(lvl); name = nm; this.x = x; this.y = y; speed = spd; } ,它是

  • song
  • hasAndBelongsToMany albums
  • hasAndBelongsToMany playlists
  • hasAndBelongsToMany userplaylists

以下是belongsTo artist

/common/models/song.json

但是当我查看生成的postgresql表时,我看到了:

{
  "name": "song",
  "plural": "song",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
   //some more properties of song
  }, 
  "validations": [], 
  "relations": {
    "albums": {
      "type": "hasAndBelongsToMany",
      "model": "album",
      "foreignKey": ""
    },  
    "artist": {
      "type": "belongsTo",
      "model": "artist",
      "foreignKey": ""
    },  
    "playlists": {
      "type": "hasAndBelongsToMany",
      "model": "playlist",
      "foreignKey": ""
    },  
    "userplaylists": {
      "type": "hasAndBelongsToMany",
      "model": "userplaylist",
      "foreignKey": ""
    }   
  },  
  "acls": [], 
  "methods": []
}

因此,localhost:3000 / explorer中的loopbacks explorer中的接口说:

 title        | character varying(1024) | not null
 id           | integer                 | not null default nextval('song_id_seq'::regclass)
 #some other properties of song
 artistid     | integer                 | 

问题:还不应该有歌曲,播放列表和用户播放列表变量???或者我在NoSql世界中工作太多,现在我忘了如何处理关系?

顺便说一句。我有一个迁移脚本,我在将关系添加到模型时执行:

post /song 
Response Class

    Model
    Model Schema

{
  "title": "",
  //some other properties of song
  "id": 0,
  "artistId": 0
}

1 个答案:

答案 0 :(得分:0)

通常相关数据有外键:

客户 订单属于客户,因此订单包含一个包含客户ID的列。

请注意,每个更改模型都必须通过自动更新脚本与数据库同步。

module.exports = function(app) {
var ds = app.dataSources.pg;
ds.isActual('mymodel', function(err, actual) {
    if (!actual) {
        ds.autoupdate('mymodel', function(err, result) {
            console.log("AUTOUPDATE mymodel",err,result);
        });
    }
});
};