Ассоциация Sequelize существует в pgAdmin, но продолжает искать неизвестный столбец во время запросов - PullRequest
0 голосов
/ 03 апреля 2019

У меня какое-то время были проблемы с тем, чтобы должным образом заставить мои ассоциации работать.У меня есть модель аукционов и модель заявок, модель аукционов имеет много заявок.На Аукционах есть внешний ключ "BidId", который связан с "bid_id" на Ставках.

Auction.js

const Sequelize = require('sequelize');
const sequelize = require('../config/database');

const User = require('./User');
const Status = require('./Status');
const Vehicle = require('./Vehicles')
const Bids = require('./Bids');
const tableName = 'Auctions';
const Auction = sequelize.define('Auctions', {
  auc_id: {
    type: Sequelize.UUID,
    defaultValue: Sequelize.UUIDV4, // generate the UUID automatically
    primaryKey: true,
  },
  features: {
    type: Sequelize.JSONB,
  },
  bid_amount: {
    type:Sequelize.STRING
  },
  BidId: {
    type: Sequelize.INTEGER
  }
});

module.exports = Auction

Bids.js

const Sequelize = require('sequelize');


// const resolver = require('graphql-sequelize');
const sequelize = require('../config/database');
const Auction = require('./Auction');

const tableName = 'bids';
const Bids = sequelize.define('Bids', {
  bid_id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  createdAt: {
   type: Sequelize.DATE,
   // defaultValue: Sequelize.NOW
  },
  updatedAt: {
    type: Sequelize.DATE,
    defaultValue: Sequelize.NOW,
  },
  amount: {
    type: Sequelize.INTEGER
  },
  bid_amount: {
    type:Sequelize.STRING
  },
  bid_no: {
    type: Sequelize.UUID,
    defaultValue: Sequelize.UUIDV4,
  },
}, 
{tableName})


Bids.hasOne(Auction, {foreignKey: 'BidId'}) // Bids is the source, Auction is the target
Auction.hasMany(Bids);
module.exports = Bids

Когда я использую следующий запрос: const findBidOnAuction = () => {Auction.findAll( {where:{BidId:1},include:[{model:Bids}]}).then(data => console.log("result", data))} Я получаю ошибку: Unhandled rejection SequelizeDatabaseError: column GSMBids.GSMAuctionAucId does not exist

Я понятия не имею, откуда взяться GSMBids.GSMAuctionAucId, я предполагаю, что Sequelize по умолчанию ожидает столбец с таким именем при использовании ассоциаций, но это не имеет смысла, потому что я определил столбцы, которые связаны конкретно.Похоже, он пытается связать auc_id, но я не хочу этого.

edit: и если я переключу запрос и сделаю это: const findBidOnAuction = () => {Bids.findAll ({где: {bid_id: 1}, включая: [{model: Auction}]}) .then (data => console.log ("result", data))}

Я получаю Unhandled rejection SequelizeEagerLoadingError: GSMAuction is not associated to GSMBids!

1 Ответ

1 голос
/ 03 апреля 2019

Я подозреваю, что Sequelize не знает, какое поле в аукционе связано со ставками. Вы можете попробовать:

Auction.hasMany(Bids,
         {
         sourceKey : "BidId",  // auction
         foreignKey: "bid_id"  // bids
         });

Даже если ошибка не повторяется, проверьте сгенерированный SQL и убедитесь, что соединение правильное!

...