Последовательность один ко многим с нулевой ссылкой - PullRequest
0 голосов
/ 16 декабря 2018

Мой сценарий такой.Для данного товара на складе будет ноль или более затрат, связанных с ним.Итак, мои модели Sequelize выглядят следующим образом:

  // StockItem Model
  const StockItem =  sequelize.define('StockItem', {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    purchasedDate: {
      type: DataTypes.DATE,
      allowNull: true,
      defaultValue: null,
      field: 'purchased_date',
    }, {
    // Other attributes
    }, {
    paranoid: false,
    createdAt: 'created_date',
    updatedAt: 'updated_date',
    tableName: 'STOCK_ITEMS'
    });
     StockItem.associate = (models) => {
           StockItem.hasMany(models.Cost, { as: 'StockItemCosts', foreignKey: 'stock_item_id' });
     };
  });

  // Cost Model
    const Cost = sequelize.define('Cost', {
     id: {
       type: DataTypes.INTEGER,
       autoIncrement: true,
       primaryKey: true,
     },
     type: {
       type: DataTypes.STRING(50),
       allowNull: false,
     }, {
      // Other attributes
     }, {
      paranoid: false,
      createdAt: 'created_date',
      updatedAt: 'updated_date',
      tableName: 'COSTS'
    });
  });

В соответствии с моими требованиями, я должен быть в состоянии сохранить Товар на складе, даже если он не требует затрат.Я пробовал разные способы сделать это.Но я получаю следующее сообщение об ошибке, когда я пытаюсь сохранить стоимость будет нулевое значение.Я использую Express API на основе Rest для сохранения моих данных в базу данных MySQL.И у меня есть сохраняемые данные об элементе запаса в БД следующим образом:

 const stockItem = {
  ...restApiData // Data received from FE form submission.
  StockItemCosts: restApiData.costDetails, // This is null when there is no costs associated with the item.
 }
 sequelize.transaction((t) => {
    return  StockItem.create(stockItem, {
      transaction: t,
      include: [ { model: Cost, as: 'StockItemCosts' }]
    });
  }).then ((result) => {
   // console.log('result : ', result); // eslint-disable-line no-console

   // Transaction has been committed
    // result is whatever the result of the promise chain returned to the transaction callback
  }).catch((err) => {
   console.log('err : ', err); // eslint-disable-line no-console
    // Transaction has been rolled back
    // err is whatever rejected the promise chain returned to the transaction callback
  });

И это ошибка, которую я получаю.

Executing (83cc74a4-7067-44ef-8767-d0c08783a132): ROLLBACK;
err :  { SequelizeValidationError: notNull Violation: Cost.type cannot be null,
notNull Violation: Cost.cost cannot be null,
notNull Violation: Cost.createdBy cannot be null,
notNull Violation: Cost.updatedBy cannot be null

Я пробовал ограничения: ложь, как показано ниже, ноэто тоже не сработало.Любая помощь высоко ценится.

StockItem.hasMany (models.Cost, {as: 'StockItemCosts', foreignKey: 'stock_item_id', ограничений: false});

--------------------------------------------------------------- Обновить -------------------------------------------------------

Я нашел решение согласно комментарию @Praveen Kumar.Но когда я сохраняю объекты без затрат, я не могу получить те записи, которые не связаны с затратами.Поскольку я выбираю данные с нумерацией страниц, я не могу получить разные запросы, чтобы сделать это.

Вот как я сейчас поступаю:

return StockItem.findAll({ include: [ { model: Cost, as: 'StockItemCosts' }] }) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...