Как сделать так, чтобы значение столбца по умолчанию совпадало с другим столбцом в модели с помощью Sequelize?

У меня есть простая модель со столбцом _id, как и ожидалось, но есть вторичный идентификатор, который я хотел бы использовать по умолчанию для того же значения столбца _id. На данный момент модель выглядит так:

const sequelize = app.get('sequelize')

sequelize.define('myTable', {
  _id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    primaryKey: true,
    autoIncrement: true
  },
  otherId: {
    type: Sequelize.TEXT,
    allowNull: false
  }
  someField: {
    type: Sequelize.TEXT,
    allowNull: false
  }
})

Итак, если я не передам значение для otherId при вставке новой строки, я бы хотел, чтобы оно было тем же значением, что и _id, можно ли это сделать? Если да, то как я могу этого добиться?

Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
0
0
910
2

Ответы 2

Вам просто нужно сообщить Sequelize по умолчанию из другого столбца:

otherId: {
    type: Sequelize.TEXT,
    allowNull: false,
    defaultValue: Sequelize.col('_id')
}

возможно, это не то, что вы ищете, но, надеюсь, это может помочь для справки

модель

class ModelPengguna extends Model{}
ModelPengguna.init({
    user_id: {
        type: Sequelize.UUID,
        defaultValue: Sequelize.UUIDV1
    },
    name: {
        type: DataTypes.VIRTUAL,
        get(){
            return `/${this.id}/${this.user_id}`
        }
    }
},{sequelize})

контролер

const lihat = await pengguna.findAll();
console.info(JSON.stringify(lihat, null, 2))

результат

[
  {
    "name": "/1/ae0c6760-3c54-11eb-80ed-59fb8d2c0509",
    "id": 1,
    "user_id": "ae0c6760-3c54-11eb-80ed-59fb8d2c0509",
    "createdAt": "2020-12-12T08:33:15.991Z",
    "updatedAt": "2020-12-12T08:33:15.991Z"
  }
]

Другие вопросы по теме