@a_mih

Express запрос к базе данных, как правильно сделать выборку в ассоциациях?

Сервер пишется на Express, PostgreSQL, Sequelize. Имеется контроллер, который выдает не совсем то что я от него хочу.
const getWorkersByCities = await City.findAll({
        attributes: ['id', 'cityName'],
        include: [{
          model: Worker,
          as: 'worker',
          where: { deleted: false },
          attributes: ['id', 'name'],
        }],
      });

Результат Выдачи
[
    {
        "id": 1,
        "cityName": "Ростов",
        "worker": [
            {
                "id": 4,
                "name": "Victor1"
            },
            {
                "id": 3,
                "name": "Victor1"
            }
        ]
    }
]

А должно быть
[
    {
        "id": 1,
        "cityName": "Ростов",
        "worker": [
            {
                "id": 4,
                "name": "Victor1"
            },
            {
                "id": 3,
                "name": "Victor1"
            }
        ]
    },
    {
        "id": 2,
        "cityName": "Москва",
        "worker": []
    },
    {
        "id": 3,
        "cityName": "Казань",
        "worker": []
    }
]


У таблицы Worker есть поле deleted, которое отвечает за то, удален пользователь или нет. Так вот, когда я пытаюсь получить список городов с этими пользователями, у меня отпадают города в которых нет вообще пользователей. А мне нужно чтобы они тоже приходили и с пустым массивом. Таблицы связаны между собой. Как сделать?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@a_mih Автор вопроса
Вопрос решен. Использую мягкое удаление. Настройка paranoid: true
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
когда я пытаюсь получить список городов с этими пользователями, у меня отпадают города в которых нет вообще пользователей

они и будут отпадать, так как запрашиваете список с определённым пользователем)
можно добавить ещё одно условие, или убрать условие deleted: false
const getWorkersByCities = await City.findAll({
  attributes: ['id', 'cityName'],
    include: [{
      model: Worker,
        as: 'worker',
          where: {
            [Op.or]: [
              { deleted: false },
              { worker: [] }
            ]
          }
          attributes: ['id', 'name'],
        }],
      });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы