Автоматически заполняемое поле в модели секвелизации? - PullRequest
0 голосов
/ 07 мая 2020

Я создаю модель для таблицы «пользователей» в MySQL. В идеале я хотел бы иметь поля 'firstName' и 'lastName' и 'fullName', которые были бы добавлением других 2. Можно ли иметь это программно в модели или я должен позаботиться об этом во время INSERT?

const User = sequelize.define("users", {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true,
  },
  firstName: {
    type: Sequelize.STRING(50),
    allowNull: false,
  },
  lastName: {
    type: Sequelize.STRING(50),
    allowNull: false,
  },
  fullName: {
    type: Sequelize.STRING(50),
    allowNull: false,
    // something that makes 'firstName' + ' ' + 'lastName' ❤️

  },
  email: {
    type: Sequelize.INTEGER(30),
    allowNull: false,
  },
});

1 Ответ

1 голос
/ 07 мая 2020

Виртуальные столбцы - это то, что вы ищете.

«Виртуальные» столбцы - это столбцы, которые не сохраняются в вашей базе данных - они рассчитываются на лету на основе значения других столбцов. Они полезны для экономии места, если есть значения, которые мы хотим использовать в наших экземплярах, которые можно легко вычислить.

    const User = sequelize.define("users", {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
      },
      firstName: {
        type: Sequelize.STRING(50),
        allowNull: false,
      },
      lastName: {
        type: Sequelize.STRING(50),
        allowNull: false,
      },
       fullName: {
         type: DataTypes.VIRTUAL,
         get() {
               return `${this.firstName} ${this.lastName}`;
         }
      },
      email: {
        type: Sequelize.INTEGER(30),
        allowNull: false,
      },
    });

Для получения дополнительной информации см. виртуальные поля.

...