it-swarm.com.ru

Sequelize JSON тип данных

Я определил модель как

module.exports = function (sequelize, DataTypes) {
  const MyModel = sequelize.define('MyModel', {
    data: {
      type: DataTypes.JSON,
      ...
    },
    ...
  });

  return MyModel;
};

Я запрашиваю это с помощью

MyModel.findAll().then(myModels => ...);

Однако поле data в результате запроса является строкой, а не объектом JSON. Как мне это исправить?

4
MikkoP

Пока не поддерживается тип данных MySQL JSON # 4727 . Но вы можете сделать что-то вроде этого:

 module.exports = function (sequelize, DataTypes) {
      const MyModel = sequelize.define('MyModel', {
        data: {
          type: Sequelize.TEXT,
           get: function () {
                return JSON.parse(this.getDataValue('value'));
            },
            set: function (value) {
                this.setDataValue('value', JSON.stringify(value));
            },
    ,
          ...
        },
        ...
      });

      return MyModel;
};

Я также нашел этот пакет на github sequelize-json вы можете попробовать его, если не хотите использовать геттеры и сеттеры.

7
Jalal

Типы данных JSON не поддерживаются для MySQL.

Смотрите документы здесь http://docs.sequelizejs.com/en/v3/docs/models-definition/#data-types

Обходной путь может заключаться в использовании текста и разбора строк/разбора при запросе

1
redeye