множественное значение из связанной таблицы в sequelize и postgres - PullRequest
0 голосов
/ 04 марта 2020

Привет! Я пытаюсь связать таблицу шагов и таблицу пользователей в моей postgres db

User.hasMany(models.Steps, {
  foreignKey: "stepId",
  as: "steps"
});

, а модель шагов имеет

Steps.belongsTo(models.User, {
  as: "user",
  foreignKey: "stepId"
});

и в моем сервисе пользователя внутри findall Я использую

include: [
{
            model: Steps,
            as: "steps",
            all: true,
            required: true
          }
        ],
        where: {
          id: req.query.id
        },
        raw: true,
        nest: true
]

, что приводит к следующему ответу

{
    "status": "success getUserById getUserById",
    "message": null,
    "data": [
        {
            "id": 5,
            "name": "rsdfsa",
            "age": 24,
            "height": "5.8",
            "weight": "40.5",
            "createdAt": "2020-03-03",
            "updatedAt": "2020-03-03",
            "steps": {
                "stepId": 5,
                "steps": "29",
                "createdAt": "2020-03-03",
                "updatedAt": "2020-03-03"
            }
        },
        {
            "id": 5,
            "name": "rsdfsa",
            "age": 24,
            "height": "5.8",
            "weight": "40.5",
            "createdAt": "2020-03-03",
            "updatedAt": "2020-03-03",
            "steps": {
                "stepId": 5,
                "steps": "34",
                "createdAt": "2020-03-03",
                "updatedAt": "2020-03-03"
            }
        }
    ]
}

Есть ли способ получить только одного пользователя со всеми шагами, связанными с этим пользователем, пожалуйста, сообщите мне

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Проблема была в том, что у меня не было внешнего ключа в таблице шагов, я использовал stepId в качестве первичного ключа, но столбца userId не было. Как только я это изменил, он работает.

0 голосов
/ 04 марта 2020

Вы должны использовать предложение group by, чтобы сгруппировать все шаги, принадлежащие одному и тому же пользователю, следующим образом -

include: [
  {
    model: Steps,
    as: 'steps',
    all: true,
    required: true
  }
],
where: {
  id: req.query.id
},
group: ['id', '`steps`.`stepId`'],
subQuery: false
...