При MySQL я пытаюсь заказать по ST_Distance_Sphere
, используя QueryBuilder
.
У меня есть объект:
import { Entity, PrimaryKey, Property } from "mikro-orm";
@Entity({ tableName: "studio" })
export default class StudioEntity {
@PrimaryKey()
public id!: number;
@Property()
public name!: string;
@Property({ columnType: "point srid 4326" })
public geometry!: object;
}
И я пытаюсь:
export default class StudioStore {
private studioRepository: EntityRepository<StudioEntity>;
public constructor(ormClient: OrmClient) {
this.studioRepository = ormClient.em.getRepository(StudioEntity);
}
public async findPage(first: number): Promise<StudioEntity[]> {
const query = this.studioRepository.createQueryBuilder().select("*");
query.addSelect(
"ST_Distance_Sphere(`e0`.`geometry`, ST_GeomFromText('POINT(28.612849 77.229883)', 4326)) as distance",
);
query.orderBy({ distance: "ASC" });
return query.limit(first).getResult();
}
}
Но я получаю ошибку ORM:
Попытка запроса по несуществующему свойству StudioEntity.distance
Итак, я пытаюсь добавить свойство в объект:
@Property({ persist: false })
public distance?: number;
Но теперь я получаю MySQL ошибку:
Неизвестный столбец 'e0.distance' в 'предложении заказа'
Это сгенерированный SQL запрос:
[query] select `e0`.*, ST_Distance_Sphere(`e0`.`geometry`, ST_GeomFromText('POINT(28.612849 77.229883)', 4326)) as distance from `studio` as `e0` order by `e0`.`distance` asc limit 5 [took 4 ms]