UNPKG

undeexcepturi

Version:

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.

90 lines (64 loc) 1.56 kB
import { Collection, Entity, ManyToMany, MikroORM, PrimaryKey, Property } from '@mikro-orm/sqlite'; type SquadType = 'GROUND' | 'AIR'; @Entity() class Soldier { @PrimaryKey() id!: number; @Property() firstName!: string; @Property() lastName!: string; @ManyToMany({ entity: 'Squad' }) squads = new Collection<Squad>(this); } @Entity() class Squad { @PrimaryKey() id!: number; @Property() type!: SquadType; @Property() formedAt!: Date; @Property({ nullable: true }) disbandedAt?: Date; @ManyToMany({ entity: 'Soldier', mappedBy: 'squads' }) soldiers = new Collection<Soldier>(this); } let orm: MikroORM; beforeAll(async () => { orm = await MikroORM.init({ entities: [Soldier, Squad], dbName: ':memory:', }); await orm.schema.createSchema(); }); afterAll(async () => { await orm.close(true); }); test(`GH issue 3240`, async () => { const luke = orm.em.create(Soldier, { firstName: 'Luke', lastName: 'Skywalker', }); const leia = orm.em.create(Soldier, { firstName: 'Leia', lastName: 'Organa', }); await orm.em.persistAndFlush([luke, leia]); orm.em.clear(); const soldiers = await orm.em.find(Soldier, {}); const squad = orm.em.create(Squad, { type: 'AIR', formedAt: new Date(), soldiers, }); await orm.em.persistAndFlush(squad); orm.em.clear(); const fetchedSquad = await orm.em.findOneOrFail( Squad, { type: 'AIR' }, { populate: ['soldiers'] }, ); expect(fetchedSquad.soldiers).toHaveLength(2); await orm.close(); });