question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[Docs] Specify how to link a created entity to another

See original GitHub issue

I have 2 factories for 2 entities Customer and Event:

Entitites

// entity/Customer.ts
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, ManyToMany, JoinTable, JoinColumn } from 'typeorm'
import { Event } from './Event'

@Entity()
export class Customer {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstname: string;

  @Column()
  lastname: string;

  @Column()
  email: string

  @ManyToMany(() => Event, event => event.customers, { cascade: true })
  @JoinTable()
  events: Promise<Event[]>
}


// entity/Event.ts
import { Entity, PrimaryColumn, Column, CreateDateColumn, OneToMany, ManyToMany, JoinTable, DeleteDateColumn } from 'typeorm'
import { Course } from './Course'
import { Customer } from './Customer'

@Entity()
export class Event {
  @PrimaryColumn()
  id: string;

  @Column()
  name: string;

  @ManyToMany(() => Customer, customer => customer.events)
  @JoinTable()
  customers: Promise<Customer[]>
}

Factories

// factory/event.ts
import { define, factory } from 'typeorm-seeding'

import { Event } from '../../entity/Event'

define(Event, (faker) => {
  const event = new Event()

  event.id = faker.company.bsBuzz()
  event.name = faker.company.catchPhraseNoun()
  event.date = faker.date.recent()

  return event
})


// factory/customer.ts
import { Customer } from '../../entity/Customer'

define(Customer, (faker) => {
  const customer = new Customer()

  customer.firstname = faker.name.firstName()
  customer.lastname = faker.name.lastName()
  customer.email = faker.internet.email()

  return customer
})

As you can see a Customer can have multiple Events and different Customers can participate to the same Event. So my goal for the seeding part is to create 10 different Events and then create 100 Customers that participate at some of these Events. So I created 2 seeding files:

// seed/create-events.ts
import { Factory, Seeder } from 'typeorm-seeding'
import { Event } from '../entity/Event'

export default class CreateEvents implements Seeder {
  public async run(factory: Factory): Promise<any> {
    await factory(Event)().createMany(10)
  }
}


// seed/create-customers.ts
import { Factory, Seeder } from 'typeorm-seeding'
import { Customer } from '../entity/Customer'

export default class CreateCustomers implements Seeder {
  // eslint-disable-next-line class-methods-use-this
  public async run(factory: Factory): Promise<any> {
    await factory(Customer)().createMany(100)
  }
}

However that only create some entries but doesn’t link them together.

I know that I could use the Event’s factory inside of the the Customer’s one:

// factory/customer.ts
import { Customer } from '../../entity/Customer'

define(Customer, (faker) => {
  const customer = new Customer()

  customer.firstname = faker.name.firstName()
  customer.lastname = faker.name.lastName()
  customer.email = faker.internet.email()

  customer.events = factory(Event)().createMany(10)

  return customer
})

But that will just create 10 different Events for each Customer.

So how to seed my Customers in a way that they are linked to some Events created during the seed:run command? I hope there is a way to do that and if yes I will be pleased to add it to the README documentation section.

Issue Analytics

  • State:open
  • Created 2 years ago
  • Reactions:3
  • Comments:5

github_iconTop GitHub Comments

4reactions
johannchopincommented, Sep 22, 2021

@michaelpwilson @phamhuyhoang95 You can easily modify the seeder order by adding a number before the filename like:

1-create-customers.ts
2-create-events.ts
4reactions
johannchopincommented, Aug 24, 2021

Sadly no @joaomantovani 😓 I hope to hear soon from the core maintainers that seems a bit shy 😅

Read more comments on GitHub >

github_iconTop Results From Across the Web

Embed or link to a file in Word - Microsoft Support
Go to Insert > Object. Select Create from File. Select Browse and choose the file you want to use.
Read more >
Links in HTML documents - W3C
3 Specifying anchors and links. Although several HTML elements and attributes create links to other resources (e.g., the IMG element, the FORM element,...
Read more >
Entities, Properties, and Keys | Cloud Datastore Documentation
You create a new entity by initializing it and setting its properties: ... For more information, see the Cloud Datastore C# API reference...
Read more >
Create Dynamic Links with the REST API - Firebase
In the Firebase console, open the Dynamic Links section. If you have not already accepted the terms of service and set a domain...
Read more >
Delegate access across AWS accounts using IAM roles
When you create the role, you define the Development account as a trusted entity and specify a permissions policy that allows trusted users...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found