sequelize.query возвращает пустой массив - PullRequest
0 голосов
/ 24 сентября 2018

Использование Sequelize 4.38.1 против PostgreSQL 10.5 , у меня есть следующий код:

const criteria = {
  attended: '2018-09-21',
  location: 'Squirrel Hill',
  teacher: 'Doe, John',
  classTitle: 'Yoga 1'
};

const sql = `
  SELECT
    "Attendances"._id,
    "Attendances"."UserId",
    "Users"."lastName" || ', ' || "Users"."firstName" AS name
  FROM
    "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
  WHERE
    "Attendances".attended = :attended AND
    "Attendances".location = :location AND
    "Attendances".teacher = :teacher AND
    "Attendances"."classTitle" = :classTitle
  ORDER BY "Users"."lastName", "Users"."firstName";`;

  sequelize.query(
    sql,
    {
      replacements: criteria,
      type: sequelize.QueryTypes.SELECT
    })
    .then(attendeeList => {
      console.log(attendeeList);
      return res.status(200).json(attendeeList);
    })

При включенном ведении журнала sequelize мой запрос правильно параметризованс заменами и выполнено:

SELECT
      "Attendances"._id,
      "Attendances"."UserId",
      "Users"."lastName" || ', ' || "Users"."firstName" AS name
    FROM
      "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
    WHERE
      "Attendances".attended = '2018-09-21' AND
      "Attendances".location = 'Squirrel Hill' AND
      "Attendances".teacher = 'Doe, John' AND
      "Attendances"."classTitle" = 'Yoga 1'
    ORDER BY "Users"."lastName", "Users"."firstName";

Проблема: мои результаты (accedeeList) возвращаются как [].Когда я выполняю тот же запрос с помощью pgAdmin, я получаю одну строку:

_id UserId  name
40  24601   "Doe, John"

У кого-нибудь есть мысли о том, что я делаю неправильно?

1 Ответ

0 голосов
/ 28 сентября 2018

Я отправил приведенный выше пример как проблему с репозиторием Sequelize Github, так как смог заставить его работать с запросом, который не включал INNER JOIN.

Для моей ситуации pg-native лучше подходит (учитывая, что разрывать сиквелиз в другом месте, поскольку он медленнее) ...

const client = new PGNativeClient();
  client.connect(config.sequelize.uri, err => {
    if(err) {
      res.status(401).json({ message: 'Not able to connect to database to get list of attendees.' });
      return;
    }
    const sql = `
      SELECT
        "Attendances"._id,
        "Attendances"."UserId",
        "Users"."lastName" || ', ' || "Users"."firstName" AS name
      FROM
        "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
      WHERE
        "Attendances".attended = $1::DATE AND
        "Attendances".location = $2 AND
        "Attendances".teacher = $3 AND
        "Attendances"."classTitle" = $4
      ORDER BY "Users"."lastName", "Users"."firstName";`;
    const { attended, location, teacher, classTitle } = req.query;
    client.query(sql, [attended, location, teacher, classTitle], (err, rows) => {
      if(err) {
        res.status(424).json({ message: 'Not able to retrieve attendees from database (but connected successfully).' });
        return;
      }
      res.status(200).json(rows);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...