Sailsjs一对多的空结果

时间:2017-06-15 08:57:52

标签: sails.js waterline

我是sailsjs的新手。试图将我的应用程序后端更改为sailsjs。拥有我需要使用的现有数据库。尝试使用一对多关联时出现此错误:

{
  "Result": [
    {
      "newCars": [],
      "name": 'Someone',
      "id": 1
    }
  ]
}

这些是我拥有的两个样本表的结构:

table user
id  |   name
1   |   Someone  


table new_car
name    |   user_id
Audi    |   1
BMW     |   1   

型号: (我不确定 - 关联,收集和通过)

//UserController.js
module.exports = {
  tableName: 'user',
  attributes: {
    name: {
      type: 'string'
    },
    newCars: {              //i can name this anything?
      collection: 'newCar',     //should this be new_car (table name)?
      via: 'user'           //this is one-side table name?
    }
  },
  autoCreatedAt: false,
  autoUpdatedAt: false
};


//NewCarController.js
module.exports = {
    tableName: 'new_car',
    attributes: {
        name: {
            type: 'string'
        },
        users: {
            model: 'User'
        }           
    },
    autoCreatedAt: false,
    autoUpdatedAt: false
};

控制器:

Role.find(1).populate('newCars').exec(function (err, result){
    res.json({Result: result});
});

我在评论中添加了一些问题。

2 个答案:

答案 0 :(得分:1)

您需要将collection名称更改为newcar。在Sails中,只要在viacollectionmodel中引用模型,您就需要使用小写名称。阅读更多here

注意

您需要允许Sails创建自己的关联表。例如,您需要创建模型UserCar,然后让Sails为您进行映射。它是通过创建User_Car(不一定是同名)表格来内部完成的,该表格将user_id映射到car_id。这可以通过使用sails-generate-api

创建两个apis来完成

$ sails generate api User

$ sails generate api Car

现在您的模型看起来像:

//User.js
module.exports = {

  attributes: {
    name: 'string',

    cars: {
      collection: 'car',
      via: 'user'
    }
  }
};

// Car.js
module.exports = {

  attributes: {
    name: 'string',

    user: {
      model: 'user'
    }
  }
};

现在,您可以通过向User发送HTTP POST并将车发送至/user来创建/car

要创建关联User=>Car,请将HTTP POST发送到/user/:id/car/:id

现在,当您通过User获取GET /user/:id的详细信息时,Cars拥有的所有user[:id]都将被填充。

答案 1 :(得分:1)

需要修复它。这对我这样的新手来说可能有用。只需要识别主键和外键。

//at the one side
id: {
    type: 'integer',
    primaryKey: true
}


//at the many side      
user: {
    columnName: 'user_id',
    model: 'user'
}