Sequelize hasMany include для возврата объекта, а не массива - PullRequest
0 голосов
/ 14 января 2019

Определения моделей:

sequelize.define('Parent', {name: DataTypes.STRING})
sequelize.define('Child', {name: DataTypes.STRING})

Ассоциация:

Parent.hasMany(Child, {
  foreignKey: 'parent_id',
  as: 'child'
})

Child.belongsTo(Parent)

Включите функцию:

Parent.findByPk(pk, {
  include: [{
    model: Child,
    as: 'child',
    where: {
      name: 'benny'
    }
  }]
})

Что он возвращает (обычное поведение):

{
  "id": 1,
  "name": "parent name",
  "child": [
    {
      "id": 2
      "name": "benny",
      "parent_id": 1
    }
  ]
}

То, что я хочу вернуть (я не вижу поддержки или упоминания в документах)

{
  "id": 1,
  "name": "parent name",
  "child": {
    "id": 2
    "name": "benny",
    "parent_id": 1
  }
}

Разница в том, что Child настроен для возврата в качестве объекта

Кто-нибудь встречал этот вызов?

1 Ответ

0 голосов
/ 14 января 2019

http://docs.sequelizejs.com/manual/tutorial/associations.html

Parent.hasOne (Child, { foreignKey: 'parent_id', как: «ребенок» })

иначе это массив, потому что родитель может иметь более одного.

Parent.hasMany (Child, { foreignKey: 'parent_id', как: «дети» })

Если вы действительно заботитесь только о первом или единственном ребенке .. Parent.children [0]

Вы можете привязать свою собственную функцию к родительскому элементу с именем child, который возвращает только первую функцию в массиве children. Или самое последнее по дате ... решать вам об этой функции.

...