2015-07-31 2 views
2

Я создаю API с петлей looploop.nodejs/loopback: определение отношений не отражается на базе данных?

Я определил мои модели, и в основном все хорошо там. Но у меня проблема с пониманием того, как loopback касается отношений.

Не все мои отношения я определил, кажется, действительно быть отражены в базе данных и интерфейса.

К примеру, у меня есть модель song, она

  • hasAndBelongsToMany albums
  • hasAndBelongsToMany playlists
  • hasAndBelongsToMany userplaylists
  • belongsTo artist

Вот /common/models/song.json

{ 
    "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": [] 
} 

Но когда я смотрю на стол PostGreSQL генерируемой, я вижу:

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

Соответственно, интерфейс в Loopbacks исследователя на локальном хосте: 3000/исследователь говорит:

post /song 
Response Class 

    Model 
    Model Schema 

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

вопрос : Не должно быть также песен, списков воспроизведения и переменной userplaylists ??? Или я слишком много работал в мире NoSql, и теперь я забыл, как обращаться с отношениями?

BTW. У меня есть сценарий перенастройки, который я выполняется при добавлении отношения к моделям:

var path = require('path'); 
var app = require(path.resolve(__dirname, '../server')); 

var dataSource = app.dataSources.cantoalegre_ps_DS; 

dataSource.automigrate(function(err) { 
    if (err) { 
    console.log("Error migrating models: " + err); 
    } 
    else { 
    console.log("Successfully migrated models"); 
    } 
    process.exit(); 
}); 

ответ

0

обычно связанные данные имеют внешний ключ:

клиент, заказ принадлежит клиенту так порядок имеет столбец, который содержит Пользовательский ИД.

Позаботьтесь, что при каждом изменении модель должна быть синхронизирована с БД с помощью автообновления скрипта.

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); 
     }); 
    } 
}); 
};