我正在使用Bookshelf创建一个相当简单的RESTful API,并希望在使用underscore_database_columns时返回一致的camelCase格式。
我正在使用文档中的format
和parse
方法成功执行此操作,但withPivot
数据除外。
所有代码都是从我的项目中简化的,所以请原谅任何语法错误等,它们可能不存在于我的真实代码中
我有两个模型,Recipe
和Ingredient
。
var Recipe = BaseModel.extend({
tableName: 'recipe',
defaults: { name: null },
ingredients: function () {
return this
.belongsToMany('Ingredient')
.withPivot(['measurement', 'sort_order']);
}
}));
var Ingredient = BaseModel.extend({
tableName: 'ingredients',
defaults: { name: null },
recipes: function () {
return this
.belongsToMany('Recipe');
}
}));
我正在查询以下内容:
Model
.forge({
id: 1
})
.fetch({
withRelated: ['ingredients']
})
.then(function (model) {
return res.json(model.toJSON());
})
.catch(function (err) {
return done(err);
});
返回:
{
"id": 1,
"name": "Yummy Thing",
"ingredients": [
{
"id": 1,
"name": "Food Stuff",
"_pivot_ingredient_id": 1,
"_pivot_recipe_id": 1,
"_pivot_measurement": "Loads",
"_pivot_sort_order": 1
}
]
}
正如您所看到的,_pivot
数据与@ {1}}一样是snake_case,因为它指向表列名而不是属性。
有没有办法像camelCase一样轻松引用和返回数据透视数据?
我已经覆盖了.withPivot(['measurement', 'sort_order'])
哪个工作正常但感觉不对,因为基本模型默认使用camelCase。
toJSON
我愿意使用toJSON: function () {
var data = BaseModel.prototype.toJSON.apply(this, arguments);
data.ingredients && (data.ingredients = data.ingredients.map(this.parse));
return data;
}
模型,但我couldn't work了解如何使用fetch返回through
表数据。 (我没有设置上面的JSON格式,只要所有数据都以某种形式存在。)