Как сделать где в столбце с типом TIME в Sequelize? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть несколько таблиц, которые я использую DataType.Time:

startTime: {
  type: DataTypes.TIME,
  allowNull: false
}

Когда я делаю запрос, результат выглядит так:

"startTime": "14:27:00"

Но если я пытаюсь сделать просто ГДЕ в этом столбце «startTime» с «14:27:00», не работает. Результат недействителен, кто-то знает, почему это?

Спасибо всем!

1 Ответ

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

Вот рабочий пример использования "sequelize": "^5.21.3":

index.ts:

import { sequelize } from '../../db';
import { Model, DataTypes } from 'sequelize';

class SomeModel extends Model {}
SomeModel.init(
  {
    startTime: {
      type: DataTypes.TIME,
      allowNull: false,
    },
  },
  { sequelize, modelName: 'some_models' },
);

(async function test() {
  try {
    await sequelize.sync({ force: true });
    // seed
    await SomeModel.create({ startTime: '14:27:00' });
    // test
    const rval = await SomeModel.findOne({ where: { startTime: '14:27:00' }, raw: true });
    console.log(rval);
  } catch (error) {
    console.log(error);
  } finally {
    await sequelize.close();
  }
})();

Результаты выполнения:

Executing (default): DROP TABLE IF EXISTS "some_models" CASCADE;
Executing (default): DROP TABLE IF EXISTS "some_models" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "some_models" ("id"   SERIAL , "startTime" TIME NOT NULL, PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'some_models' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
Executing (default): INSERT INTO "some_models" ("id","startTime") VALUES (DEFAULT,$1) RETURNING *;
Executing (default): SELECT "id", "startTime" FROM "some_models" AS "some_models" WHERE "some_models"."startTime" = '14:27:00' LIMIT 1;
{ id: 1, startTime: '14:27:00' }

Проверка записей данных в базе данных :

node-sequelize-examples=# select * from "some_models";
 id | startTime
----+-----------
  1 | 14:27:00
(1 row)

node-sequelize-examples=# \d+ some_models;
                                                      Table "public.some_models"
  Column   |          Type          |                        Modifiers                         | Storage | Stats target | Description
-----------+------------------------+----------------------------------------------------------+---------+--------------+-------------
 id        | integer                | not null default nextval('some_models_id_seq'::regclass) | plain   |              |
 startTime | time without time zone | not null                                                 | plain   |              |
Indexes:
    "some_models_pkey" PRIMARY KEY, btree (id)
...