3

Bookshelf を使用してかなり単純な RESTful API を作成しており、underscore_database_columns を使用しているときに一貫したキャメルケース形式を返したいと考えています。

formatデータを除いて、ドキュメントのメソッドとメソッドを使用しparseてこれを正常に実行していwithPivotます。

すべてのコードは私のプロジェクトから単純化されているため、構文エラーなどはご容赦ください。実際のコードには存在しない可能性があります

私は2つのモデルを持ってい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、snake_caseです。.withPivot(['measurement', 'sort_order'])

キャメルケースとしてピボットデータを簡単に参照して返す方法はありますか?

基本モデルがデフォルトでキャメルケースを使用していることを考えると、正常に動作するものをオーバーライドしましtoJSONたが、間違っているように感じます。

toJSON: function () {
  var data = BaseModel.prototype.toJSON.apply(this, arguments);
  data.ingredients && (data.ingredients = data.ingredients.map(this.parse));
  return data;
}

私はthroughモデルを使用することにオープンですが、フェッチでテーブル データを返す方法を理解できませんでした。through(すべてのデータが何らかの形式である限り、上記の JSON 形式に設定されていません。)

4

0 に答える 0