Ключ Postgres (keyId, keyId, keyId) = (2, 2, 2) отсутствует в ограничении таблицы - PullRequest
0 голосов
/ 21 декабря 2018

Когда я начинаю заполнять свою базу данных, все в порядке, но когда я пытаюсь добавить вторую группу предложений во 2-й список того же пользователя (1-я группа предложений успешно добавлена ​​в 1-й список пользователя)

/ entity / User.ts

@Entity('users') // @note for postgres naming conflict
export class User extends BaseEntity {
  @PrimaryGeneratedColumn() id: number

  @Column({ type: 'text', unique: true })
  username: string

  @OneToMany(() => Listing, listing => listing.user)
  listings: Listing[]
}

/ entity / Listing.ts Пользователь => 1: M => Список

@Entity()
export class Listing extends BaseEntity {
  @PrimaryGeneratedColumn() id: number

  @Column({ type: 'varchar', length: 255 })
  title: string

  @OneToMany(() => Offer, offer => offer.listing)
  offers: Offer[]

  @PrimaryColumn()
  userId: number

  @ManyToOne(() => User, user => user.listings)
  @JoinColumn({ name: 'userId' })
  user: Promise<User>
}

/ entity / Offer.ts Листинг => 1: M => Предложение

@Entity()
export class Offer extends BaseEntity {
  @PrimaryGeneratedColumn() id: number

  @Column('int') price: number

  @PrimaryColumn()
  listingId: number

  @ManyToOne(() => Listing, listing => listing.offers)
  @JoinColumn({ name: 'listingId' })
  listing: Promise<Listing>
}

Вот код мира для заполнения базы данных:

const users = [
  {
    id: 1,
    username: faker.internet.userName(),
  }
]

const listings = [
  {
    id: 1,
    title: faker.lorem.sentence(),
    userId: 1
  },
  {
    id: 2,
    title: faker.lorem.sentence(),
    userId: 1,
  }
]

const offers = [
  {
    id: 1,
    price: faker.random.number(priceOptions),
    listingId: 1,
  },
  {
    id: 2,
    price: faker.random.number(priceOptions),
    listingId: 2,
  }
]

export const startSeeding = async () => {
    await users.map(user => User.create(user).save())

    await listings.map(listing => Listing.create(listing).save())

    setTimeout(async () => {
      await offers.map(offer => Offer.create(offer).save())
    }, 3000) // for sure
}

Сообщение об ошибке:

query failed: INSERT INTO "offer"("price", "wage", "hoursOfWeek", "housing", "tips", "overtimes", "notes", "offerTypeId", "positionId", "listingId") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id", "housing", "tips", "overtimes" -- PARAMETERS: [256,16,32,true,true,true,"Qui dolores assumenda doloremque doloribus.",1,2,2]
error: { error: insert or update on table "offer" violates foreign key constraint "FK_d33dccabb2f699c92920ff197c8"
detail: 'Key (listingId, listingId, listingId)=(2, 2, 2) is not present in table "listing".',

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Я выяснил, в чем проблема с моим кодом, я использовал PrimaryColumn для отношений 1: M, но мне нужно просто Column

0 голосов
/ 21 декабря 2018
 await users.map(user => User.create(user).save())

не так

вы должны сделать

 await Promise.all(users.map(user => User.create(user).save()))
...