如何使用Bookshelf访问“通过”表上的数据
How to access data on a `through` table with Bookshelf
我正在使用[BookshelfJS][BookshelfJS]作为我的ORM,我想知道如何访问though
表上的数据。
我有3个模型,Recipe
, Ingredient
和RecipeIngredient
连接两者。
var Recipe = BaseModel.extend({
tableName: 'recipe',
defaults: { name: null },
ingredients: function () {
return this
.belongsToMany('Ingredient')
.through('RecipeIngredient')
.withPivot(['measurement']);
}
}));
var Ingredient = BaseModel.extend({
tableName: 'ingredients',
defaults: { name: null },
recipes: function () {
return this
.belongsToMany('Recipe')
.through('RecipeIngredient');
}
}));
var RecipeIngredient = BaseModel.extend({
tableName: 'recipe_ingredients',
defaults: { measurement: null },
recipe: function () {
return this.belongsToMany('Recipe');
},
ingredient: function () {
return this.belongsToMany('Ingredient');
}
}));
然后我尝试检索Recipe
以及所有Ingredients
,但无法弄清楚如何在RecipeIngredient
上访问measurement
。
Recipe
.forge({
id: 1
})
.fetch({
withRelated: ['ingredients']
})
.then(function (model) {
console.log(model.toJSON());
})
.catch(function (err) {
console.error(err);
});
返回:
{
"id": 1,
"name": "Delicious Recipe",
"ingredients": [
{
"id": 1,
"name": "Tasty foodstuff",
"_pivot_id": 1,
"_pivot_recipe_id": 1,
"_pivot_ingredient_id": 1
}
]
}
没有measurement
值。
我曾认为.withPivot(['measurement'])
方法会抓取值,但它不返回任何额外的数据。
我错过了什么或误解了这是如何工作的?
我不太确定你为什么要使用through
。如果它只是一个基本的多对多映射,您可以通过执行以下操作来实现:
var Recipe = BaseModel.extend({
tableName: 'recipe',
defaults: { name: null },
ingredients: function () {
return this
.belongsToMany('Ingredient').withPivot(['measurement']);
}
}));
var Ingredient = BaseModel.extend({
tableName: 'ingredients',
defaults: { name: null },
recipes: function () {
return this
.belongsToMany('Recipe').withPivot(['measurement']);;
}
}));
你不需要一个额外的连接表模型。只要确保在数据库中定义一个连接表为ingredients_recipe
(按字母顺序连接表名!)。或者,您可以为belongsToMany
函数提供您自己的自定义名称,以确定连接表的名称。确保ingredients_recipe
ingredients_id
和recipe_id
差不多就是这样了。然后你可以输入
Recipe
.forge({
id: 1
})
.fetch({
withRelated: ['ingredients']
})
.then(function (model) {
console.log(model.toJSON());
})
.catch(function (err) {
console.error(err);
});
相关文章:
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 警报框中的数据通过linq
- 通过连线将数据从js发送到控制器
- json-ajax动画防止通过php发送数据
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- 使用angularjs中的rest调用通过id获取数据
- 如何使 Angular 服务中的数据通过页面刷新持久化
- 谷歌地图/融合表Javascript HTML赢得't显示/可视化所有多边形数据(通过色标)
- 在 Javascript 中没有数据通过 FileReader 传递
- 对JSON数据通过Jquery附加的Jquery表进行排序
- 将图像文件等多个数据通过ajax发布到php
- Post数据通过php到我的数据库在AngularjS
- 在我的Python CGI脚本中,我如何将用户在表单中输入的数据通过POST请求上传的文件保存到磁盘
- 我如何处理表单/数据通过Ajax的测验类游戏在CakePHP
- JQuery对象数据通过多个滑块过滤
- 这是防止数据通过cookie隐藏的好方法
- Laravel:没有数据通过ajax发送
- 如何将输入到 Google 表单中的数据通过电子邮件发送给我
- 如何只发送post数据(通过按钮点击)在webView没有以下链接
- 如何在小函数之间传递数据——通过闭包还是通过对象的属性