繁体   English   中英

使用 typeorm 在“订单子句”中获取错误“未知列”

[英]Getting an error 'Unknown column' in 'order clause' using typeorm

我正在尝试使用 typeorm 和 MySQL 创建一个查询。 我不断收到以下错误:

[巢] 44806 - 2021 年 9 月 12 日,下午 2:37:03 错误 [ExceptionsHandler] ER_BAD_FIELD_ERROR:“订单子句”中的未知列“排序顺序”QueryFailedError:ER_BAD_FIELD_ERROR:“订单子句”中的未知列“排序顺序”

我的查询是:

const { limit, page: skip, userLat, userLng, searchQuery, weekday, startHour, endHour } = options;
let stores;

// get only stores that open in the start and end hours range
const openHoursQuery = `
      '${startHour}' BETWEEN \`from\` AND \`to\` AND
      '${endHour}' BETWEEN \`from\` AND \`to\`
      AND weekday = ${weekday}
  `;

// get the distance from user's location to each store
const getDistanceQuery = `
      SQRT(
        POW(69.1 * (lat - ${userLat}), 2) +
        POW(69.1 * (${userLng} - \`long\`) * COS(lat / 57.3), 2)
      ) AS distance
    `;

stores = this.storeRepository.createQueryBuilder('store')
  .leftJoinAndSelect('store.hours', 'store_hours')
  .addSelect(userLat && userLng ? getDistanceQuery : '')
  .where(searchQuery ? `name LIKE '%${searchQuery}%'` : '')
  .andWhere(weekday && startHour && endHour ? openHoursQuery : '')
  .orderBy(userLat && userLng ? 'distance' : 'sort_order')//sort_order
  .take(limit)
  .skip(skip)
  .getManyAndCount();

return stores;

问题是由“leftJoinAndSelect”方法引起的,当我评论连接时,查询执行没有任何问题。

我的数据库表如下所示:

表:商店

列:id、uuid、名称、状态、地址、URL、email、lat、long、sort_order

表:store_hours

列:id、store_id、工作日、从、到、类型

编辑:

我设法理解了这个问题,我不得不使用 store.sortOrder ,它是“商店”实体中的名称对应字段。

我现在有一个后续问题,当我使用“加入”方法时,按距离排序不起作用。

“距离”是我在 select 中创建的附加字段,用于按与用户的距离对商店进行排序。

谢谢

找到了答案。

我应该使用 Alise 论点,而不是自己创建 alise。

解决方案:

  .addSelect(userLat && userLng ? getDistanceQuery : '', 'distance')

  .orderBy(userLat && userLng ? 'distance' : 'store.sortOrder')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM