Bookshelfjs:belongsTo()关系

时间:2015-10-26 10:24:11

标签: node.js bookshelf.js

我正在使用ExpressJS和MySQL。

我试图获取用户的朋友列表,但我无法在此处获取friend_id的信息。如何将其包含在我的查询中?它似乎遵循自己的约定,因此它不会将friend_id包含在查询中。

这是我现在得到的:

[
    {"id":1,"user_id":1,"friend_id":2,"friends":
    {"id":1,"email":"user1@gmail.com","username":"user1"}},
    {"id":2,"user_id":1,"friend_id":3,"friends":
    {"id":1,"email":"user1@gmail.com","username":"user1"}}
]

我应该能够看到friend_id = 2和friend_id = 3的值(id,电子邮件,用户名等)

朋友表

id
user_id (foreign key from users table)
friend_id (foreign key from users table)

用户表

id
name
email

模型

var friend = db.Model.extend({
    tableName: 'friends',
    friends: function () {
        return this.belongsTo(user);
    }
});

var user = db.Model.extend({
    tableName: 'users'
});

查询

var friend = require('../models').friend;
var user = require('../models').user;


router.get('/relative', function (req, res) {
    friend.where('user_id', 1).fetchAll({withRelated: ['friends']}).then(function (friends) {
        res.send(JSON.stringify(friends));
    });
});

1 个答案:

答案 0 :(得分:2)

您应该更新您的查询,如下所示;

#cg{
  background: url("../cg_collage.jpg");
}

如果这不能解决您的问题,您可以尝试更新您的模型,如下所示;

       friend.where('user_id', 1)
       .fetchAll({ 
          withRelated: [{
             'friend_id': function(qb) {
                qb.column('id','name')
           }}])
       .then(function (friends) {
            res.send(JSON.stringify(friends));
        });