如何访问具有其他一对多关系的连接表上的数据

时间:2015-11-04 09:07:36

标签: mysql node.js bookshelf.js

嗨我和之前提出的问题How to access data on a through table with Bookshelf几乎有同样的问题,但是我没有使用单位(L,Kg,mg,ml等等)连接到RecipeIngredient表。我想拥有的是类似的,但我的单位?像这样:

{
  "id": 1,
  "name": "Delicious Recipe",
  "ingredients": [
    {
      "id": 1,
      "name": "Tasty foodstuff",
      "_pivot_id": 1,
      "_pivot_recipe_id": 1,
      "_pivot_ingredient_id": 1,
      "_pivot_amount": 10,
      "Unit": "kg"
    }]
}

我的多对多表看起来像这样:

CREATE TABLE IF NOT EXISTS `Ingredients_Recipe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Recipe_id` int(11) NOT NULL,
  `Ingredient_id` int(11) NOT NULL,
  `amount` int(11) NOT NULL,
  `Unit_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
KEY `Ingredient_id` (`Ingredient_id`),
KEY `Unit_id` (`Unit_id`),
KEY `Recipe_Ingredients_ibfk_1` (`Recipe_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

我的Unit表看起来像这样:

CREATE TABLE IF NOT EXISTS `Units` (
  `id` int(11) NOT NULL,
  `unit` varchar(10) NOT NULL,
UNIQUE KEY `unit` (`unit`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我的食谱表如下所示:

CREATE TABLE IF NOT EXISTS `Recipe` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'identifier',
  `name` varchar(254) NOT NULL COMMENT 'Name of the recipe',
  `description` text NOT NULL COMMENT 'Recipe description',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

和我的成分表看起来像这样:

CREATE TABLE IF NOT EXISTS `Ingredients` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(254) NOT NULL,
PRIMARY KEY (`id`)

)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 5;

我的食谱模型看起来像这样

module.exports = Bookshelf.Model.extend({
  tableName: 'Recipe',

  ingredients: function() {
    var Ingredient = require("./Ingredient");

    return this.belongsToMany(Ingredient);
  }
});

我的获取请求如下所示:

 Recipe.forge({id: "1"})
    .fetch({withRelated: ["ingredients"]})
    .then( function (recipe) {
      resp.json({error: false, data: recipe.toJSON()});
  })
    .otherwise(function (err) {
    resp.status(500).json({error: true, data: {message: err.message}});
  });

如果你运行这个我会得到一个json响应,如下所示:     {       " id":1,       " name":" Delicious Recipe",       "成分":[         {           " id":1,           "名称":"美味食品",           " _pivot_id":1,           " _pivot_recipe_id":1,           " _pivot_ingredient_id":1,         }]     }

但我想添加

"_pivot_amount": 10,
"Unit": "kg"

在成分对象中。

我该怎么做?

问候

我尝试做的是一本食谱应用程序。我使用node.js作为restAPI服务器,当我发送GET请求时,我想要的是获取配料和配料量以及金额单位的配方。

1 个答案:

答案 0 :(得分:0)

我使用一个名为bookends https://city41.github.io/bookends/的小库,基本上可以快速完成你想要的东西