Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Order by doesn’t work with embeddable fields inside populated entity #5389

Closed
5 tasks done
olegkomendat opened this issue Mar 29, 2024 · 0 comments
Closed
5 tasks done

Comments

@olegkomendat
Copy link

Describe the bug

I'm trying to order data by embeddable fields inside the populated entity, and all the time I getting this error:

DriverException: Cannot read properties of null (reading 'toLowerCase')
    at PostgreSqlExceptionConverter.convertException (#Project/node_modules/@mikro-orm/core/platforms/ExceptionConverter.js:8:16)
    at PostgreSqlExceptionConverter.convertException (#Project/node_modules/@mikro-orm/postgresql/PostgreSqlExceptionConverter.js:48:22)
    at PostgreSqlDriver.convertException (#Project/node_modules/@mikro-orm/core/drivers/DatabaseDriver.js:331:54)
    at #Project/node_modules/@mikro-orm/core/drivers/DatabaseDriver.js:335:24
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at PostgreSqlDriver.find (#Project/node_modules/@mikro-orm/knex/AbstractSqlDriver.js:68:24)
    at SqlEntityManager.find (#Project/node_modules/@mikro-orm/core/EntityManager.js:144:25)
    at PromotionalCodesService.getManyEntities (#Project/src/api-modules/common/snapshot-crud-service/snapshot-crud-service.service.ts:100:29)
    at PromotionalCodesService.getPromotionalCodesEntitiesList (#Project/src/api-modules/promotional-codes/promotional-codes.service.ts:171:19)

previous TypeError: Cannot read properties of null (reading 'toLowerCase')
    at PostgreSqlPlatform.getOrderByExpression (#Project/node_modules/@mikro-orm/knex/AbstractSqlPlatform.js:83:40)
    at QueryBuilderHelper.getQueryOrderFromObject (#Project/node_modules/@mikro-orm/knex/query/QueryBuilderHelper.js:514:47)
    at QueryBuilderHelper.getQueryOrder (#Project/node_modules/@mikro-orm/knex/query/QueryBuilderHelper.js:482:21)
    at #Project/node_modules/@mikro-orm/knex/query/QueryBuilderHelper.js:480:46
    at Array.flatMap (<anonymous>)
    at QueryBuilderHelper.getQueryOrder (#Project/node_modules/@mikro-orm/knex/query/QueryBuilderHelper.js:480:28)
    at #Project/node_modules/@mikro-orm/knex/query/QueryBuilder.js:474:44
    at Function.runIfNotEmpty (#Project/node_modules/@mikro-orm/core/utils/Utils.js:753:13)
    at QueryBuilder.getKnexQuery (#Project/node_modules/@mikro-orm/knex/query/QueryBuilder.js:473:22)
    at QueryBuilder.toQuery (#Project/node_modules/@mikro-orm/knex/query/QueryBuilder.js:514:26)

It works well if I use some other not embeddable fields like string, date, etc, but it doesn't work with embeddable (object).
In the old version 5, it works perfectly, but after the upgrade, it doesn't work as expected.

Reproduction

To reproduce, try to use order by for embeddable field inside the populated entity.

@Embeddable()
export class DateRangeEMM {
  @Property()
  startDate: Date;

  @Property()
  endDate: Date;
}

@Entity({ tableName: 'promotional_codes_snapshots' })
export class PromotionalCodeEM {
  @Embedded(() => DateRangeEMM)
  activeRange: DateRangeEMM;
}

@Entity({ tableName: 'actual_snapshots' })
export class ActualSnapshotEM extends CommonEM {
  @ManyToOne(() => PromotionalCodeEM, { nullable: true })
  actualPromotionalCode?: PromotionalCodeEM;
}

await this.actualSnapshotsService.repository.find(
  {},
  {
    populate: ['actualPromotionalCode'],
    orderBy: {
      actualPromotionalCode: {
        activeRange: { startDate: 'ASC' },
      },
    },
  }
);

What driver are you using?

@mikro-orm/postgresql

MikroORM version

6.1.12

Node.js version

v18.12.1

Operating system

macos

Validations

@B4nan B4nan closed this as completed in 2c472ab Apr 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant