gpt4 book ai didi

javascript - 如何使用 Bookshelf 访问 `through` 表上的数据

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:57 26 4
gpt4 key购买 nike

我正在为我的 ORM 使用 [BookshelfJS][bookshelfjs],并且想知道如何访问 though 表上的数据。

我有 3 个模型,RecipeIngredientRecipeIngredient 将两者连接起来。

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
}
]
}

没有测量值。

我原以为 .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_idrecipe_id

差不多就是这样了。然后你就可以做

Recipe
.forge({
id: 1
})
.fetch({
withRelated: ['ingredients']
})
.then(function (model) {
console.log(model.toJSON());
})
.catch(function (err) {
console.error(err);
});

关于javascript - 如何使用 Bookshelf 访问 `through` 表上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com