2017-08-12 52 views
1

我有3个表:UserUserDrink,并VenueDrink我怎样才能从3个Bookshelf.js模型的数据在一个查询

这里是我的样本数据

User 
id | name | gender | 
-------------------- 
1 | John | male | 
2 | Jane | female | 

UserDrink 
id | count | user_id | venue_drink_id 
1 | 3  | 1  | 1 
2 | 5  | 1  | 2 
3 | 2  | 2  | 2 

VenueDrink 
id | name | price 
1 | Beer | 50 
2 | Wine | 100 

我怎样可以得到以下当我查询单个User时,使用BookshelfJs返回?

{ 
    "id":1, 
    "name":"John", 
    "gender":"male", 
    "user_drinks":[ 
    { 
     "id":1, 
     "count":3, 
     "user_id":1, 
     "venue_drink":{ 
     "id":1, 
     "name":"Beer", 
     "price":50 
     } 
    }, 
    { 
     "id":2, 
     "count":5, 
     "user_id":1, 
     "venue_drink":{ 
     "id":2, 
     "name":"Wine", 
     "price":100 
     } 
    } 
    ] 
} 

我试过几次尝试,但我是新来的BookshelfJs,不幸的是,我只能上去使用withRelatedhasMany关系UserDrink水平。 我只能输出如下:

{ 
    "id":1, 
    "name":"John", 
    "gender":"male", 
    "user_drinks":[ 
    { 
     "id":1, 
     "count":3, 
     "user_id":1, 
     "venue_drink_id":1 
    }, 
    { 
     "id":2, 
     "count":5, 
     "user_id":1, 
     "venue_drink_id":2 
    } 
    ] 
} 

我需要输出venue_drink的使用venue_drink_id细节。 在此先感谢。

回答

2

如下

var user = db.Model.extend({ 
    tableName: 'users', 
    hasTimestamps: false, 
    drinks: function() { 
    return this.hasMany(UserDrink, 'user_id'); 
    } 
}); 
var UserDrink = db.Model.extend({ 
    tableName: 'UserDrink', 
    hasTimestamps: false, 

    venueDrink: function() { 
    return this.belongsTo(VenueDrink, 'venue_drink_id'); 
    } 
    userRelated : function() { 
    return this.belongsTo(user,'user_id'); 
    } 
}); 
var VenueDrink = db.Model.extend({ 
    tableName: 'VenueDrink', 
    hasTimestamps: false 
}); 
user.where({ 
    id: 1 
}).fetchAll({ 
    withRelated: ['drinks.venueDrink', 'drinks.userRelated'] 
}).then(function(data) { 
    data = data.toJSON(); 
    res.send(data); 
}); 
+0

您可以获取所需的结果所以,我正在寻找的是'drinks.venueDrink'!非常感谢,我进行了为期2天的研究。 :d – Erick