diff --git a/packages/knex/src/AbstractSqlDriver.ts b/packages/knex/src/AbstractSqlDriver.ts index 5482ef598ebe..8daf148b1490 100644 --- a/packages/knex/src/AbstractSqlDriver.ts +++ b/packages/knex/src/AbstractSqlDriver.ts @@ -1446,6 +1446,10 @@ export abstract class AbstractSqlDriver { return; } + if (prop?.persist === false && !prop.embedded && !prop.formula && type === 'where') { + return; + } + if (prop?.embedded) { const name = prop.embeddedPath?.join('.') ?? prop.fieldNames[0]; const aliased = this._aliases[a] ? `${a}.${name}` : name; diff --git a/tests/issues/GH3897.test.ts b/tests/issues/GH3897.test.ts index 3b43415272e4..d0617998077c 100644 --- a/tests/issues/GH3897.test.ts +++ b/tests/issues/GH3897.test.ts @@ -10,6 +10,9 @@ export class Author { @Property() termsAccepted: boolean = false; + @Property({ persist: false }) + foo = '123'; + } let orm: MikroORM; @@ -33,7 +36,9 @@ test('GH issue 3897', async () => { author2.termsAccepted = true; await orm.em.flush(); - const r1 = await orm.em.fork().find(Author, {}); + const r1 = await orm.em.fork().find(Author, {}, { + fields: ['foo', 'termsAccepted'], + }); expect(r1[0].termsAccepted).toBe(true); expect(r1[1].termsAccepted).toBe(true); }); diff --git a/tests/issues/GH535.test.ts b/tests/issues/GH535.test.ts index 05c60aa78925..a1788f57672b 100644 --- a/tests/issues/GH535.test.ts +++ b/tests/issues/GH535.test.ts @@ -59,7 +59,12 @@ describe('GH issue 535', () => { orm.em.clear(); - const fetchedA = await orm.em.findOneOrFail(A, { id: a.id }, { populate: ['b'] }); - expect(fetchedA.calcProp).toBe('foo'); + const fetchedA1 = await orm.em.findOneOrFail(A, { id: a.id }, { fields: ['b', 'calcProp'], populate: ['b'] }); + expect(fetchedA1.calcProp).toBe('foo'); + expect(wrap(fetchedA1).toObject()).toEqual({ id: 1, b: { id: 1 }, calcProp: 'foo' }); + + const fetchedA2 = await orm.em.fork().qb(A).where({ id: a.id }).select(['id', 'calcProp']).leftJoinAndSelect('b', 'b'); + expect(fetchedA2[0].calcProp).toBe('foo'); + expect(wrap(fetchedA2[0]).toObject()).toEqual({ id: 1, b: { id: 1, a: 1, prop: 'foo' }, calcProp: 'foo' }); }); });