diff --git a/packages/core/src/entity/EntityFactory.ts b/packages/core/src/entity/EntityFactory.ts index effb7ffa5b91..0f40dab3c4fa 100644 --- a/packages/core/src/entity/EntityFactory.ts +++ b/packages/core/src/entity/EntityFactory.ts @@ -1,8 +1,8 @@ -import { ObjectBindingPattern, Utils } from '../utils'; +import { Utils } from '../utils'; import { Dictionary, EntityData, EntityMetadata, EntityName, EntityProperty, New, Populate, Primary } from '../typings'; import { UnitOfWork } from '../unit-of-work'; import { ReferenceType } from './enums'; -import { EntityManager, EventType, wrap } from '..'; +import { EntityManager, EventType } from '..'; export const SCALAR_TYPES = ['string', 'number', 'boolean', 'Date', 'Buffer', 'RegExp']; @@ -138,7 +138,7 @@ export class EntityFactory { return this.createReference(meta.properties[k].type, data[k]); } - if (!(k in data) || k as unknown === ObjectBindingPattern) { + if (!meta.properties[k]) { return data; } diff --git a/packages/knex/src/query/QueryBuilder.ts b/packages/knex/src/query/QueryBuilder.ts index 3e2b40ecc969..027255b21ce9 100644 --- a/packages/knex/src/query/QueryBuilder.ts +++ b/packages/knex/src/query/QueryBuilder.ts @@ -251,7 +251,7 @@ export class QueryBuilder = AnyEntity> { } getAliasForJoinPath(path: string): string | undefined { - if (path === this.entityName) { + if (!path || path === this.entityName) { return this.alias; } diff --git a/tests/QueryBuilder.test.ts b/tests/QueryBuilder.test.ts index fbee299889ce..bd87ba092e16 100644 --- a/tests/QueryBuilder.test.ts +++ b/tests/QueryBuilder.test.ts @@ -1410,6 +1410,34 @@ describe('QueryBuilder', () => { expect(qb.getQuery()).toEqual('select `e0`.* from `publisher2` as `e0` order by length(name) desc, `e0`.`type` asc'); }); + test('GH issue 786', async () => { + const qb1 = orm.em.createQueryBuilder(Book2); + qb1.select('*').where({ + $and: [ + { uuid: { $ne: '...' }, createdAt: { $gt: '2020-08-26T20:01:48.863Z' } }, + { tags: { name: { $in: ['tag1'] } } }, + ], + }); + expect(qb1.getQuery()).toEqual('select `e0`.*, `e0`.price * 1.19 as `price_taxed` ' + + 'from `book2` as `e0` ' + + 'left join `book2_tags` as `e2` on `e0`.`uuid_pk` = `e2`.`book2_uuid_pk` ' + + 'left join `book_tag2` as `e1` on `e2`.`book_tag2_id` = `e1`.`id` ' + + 'where `e0`.`uuid_pk` != ? and `e0`.`created_at` > ? and `e1`.`name` in (?)'); + + const qb2 = orm.em.createQueryBuilder(Book2); + qb2.select('*').where({ + $and: [ + { tags: { name: { $in: ['tag1'] } } }, + { uuid: { $ne: '...' }, createdAt: { $gt: '2020-08-26T20:01:48.863Z' } }, + ], + }); + expect(qb2.getQuery()).toEqual('select `e0`.*, `e0`.price * 1.19 as `price_taxed` ' + + 'from `book2` as `e0` ' + + 'left join `book2_tags` as `e2` on `e0`.`uuid_pk` = `e2`.`book2_uuid_pk` ' + + 'left join `book_tag2` as `e1` on `e2`.`book_tag2_id` = `e1`.`id` ' + + 'where `e1`.`name` in (?) and `e0`.`uuid_pk` != ? and `e0`.`created_at` > ?'); + }); + test('pg array operators', async () => { const pg = await MikroORM.init({ entities: [Author2, Address2, Book2, BookTag2, Publisher2, Test2, BaseEntity2, Configuration2],