2014-11-24 72 views
1

这适用于sails-disk适配器,但不适用于sails-mongo或sails-postgresql。Sails.js关联:一对多关联中没有保存到MongoDB或Postgres(与磁盘数据库)的“多”一侧

我有2个模型,饲料和事件,饲料可以属于许多事件。

当我创建或保存具有关联到一个或多个事件(通过“posts”属性)的新Feed记录时,不会保存“posts”属性。但是,当我创建或保存一个具有与一个Feed关联的新事件(通过“发布”属性)时,“发布”属性会正确保存。问题:我无法从Feed端查询Feed及其事件(使用Sails的.populate),只能从Event端查询。

我可以确认传递给Feed.create的数据包含“posts”属性,然后来自回调的响应没有。

sails.log.debug('Before Feed.create', data); 

    Before Feed.create { id: 64988, 
    username: 'anevening', 
    displayName: 'An Evening', 
    coverImage: 'http://res.cloudinary.com/dostuff-media/image/upload/v1387144880/metro-bkg_1-30.png', 
    profileImage: 'http://res.cloudinary.com/dostuff-media/image/upload/v1387144880/metro-bkg_1-30.png', 
    description: undefined, 
    links: [], 
    source: 
    { domain: 'dola.com', 
    id: 64988, 
    url: 'http://www.dola.com/artists/an-evening' }, 
    posts: [ 3055349, 3062549, 2866105, 2866107 ] } 

Feed.create(data).exec(sails.log.debug); 

    { username: 'anevening', 
    displayName: 'An Evening', 
    coverImage: 'http://res.cloudinary.com/dostuff-media/image/upload/v1387144880/metro-bkg_1-30.png', 
    profileImage: 'http://res.cloudinary.com/dostuff-media/image/upload/v1387144880/metro-bkg_1-30.png', 
    description: null, 
    links: [], 
    source: 
    { domain: 'dola.com', 
    id: 64988, 
    url: 'http://www.dola.com/artists/an-evening' }, 
    createdAt: Sat Nov 22 2014 14:53:21 GMT-0800 (PST), 
    updatedAt: Sat Nov 22 2014 14:53:21 GMT-0800 (PST), 
    id: '64988' } 

这里是我的模型是这样的:

Feed.js:

module.exports = { 

    attributes: { 

    id: { 
     type: 'integer', 
     unique: true, 
     primaryKey: true 
    }, 
    ... 
    posts: { 
     collection: 'event', 
     via: 'posted' 
    } 
    ... 

    } 
}; 

Event.js:

module.exports = { 

    attributes: { 

    id: { 
     type: 'integer', 
     unique: true, 
     primaryKey: true 
    }, 
    ... 
    posted: { 
     model: 'feed' 
    } 
    ... 

    } 

}; 

最后,这里就是我的配置/ models.js和config/connections.js的外观如下:

个连接:{

'default': 'mongo', 

    localDiskDb: { 
     adapter: 'sails-disk' 
    }, 

    mongo: { 
     adapter: 'sails-mongo', 
     url: process.env.MONGO_HOST', 
     schema: true 
    }, 

    postgres: { 
     adapter: 'sails-postgresql', 
     url: process.env.POSTGRES_HOST, 
     schema: true, 
     ssl: true 
    } 

    }, 

    models: { 
    connection: 'mongo', 
    migrate: 'alter' 
    } 
+0

我创建了一个新的职位的问题的更详细的声明:http://stackoverflow.com/questions/27896657/sails-js-many-to-many-associations-throw-error-on -create-and-populate – senornestor 2015-01-12 06:48:28

回答

1

.create方法不返回填充的数据在它的回调。如果您查询Feed模型并填充posts关联,则应该看到数据。

Feed.find() 
.populate('posts') 
.exec(console.log); 
+0

感谢您的快速响应,@particlebanana。不幸的是,'.populate'为关联属性返回空值。我一直在使用Sails控制台测试'Feed.find()。populate('posts')。exec(console.log);'用不同的适配器。使用sails-disk,我可以获得预期的填充值。随着sails-mongo,填充的值是空的。使用sails-postgresql,我得到以下错误:'Details:TypeError:Can not convert null to object undefined ' – senornestor 2014-11-24 19:48:46

+0

我注意到我的Feed模型上除Feed.find()之外的任何查询都返回undefined while我的事件模型查询按预期工作。例如,如果我从'Feed.find()'的一个结果中获取一个ID并尝试'Feed.find(12345)',它将返回undefined。我使用mongo控制台获得相同的结果。这似乎暗示我的Feed模型有什么问题? – senornestor 2014-11-24 20:17:36