2017-10-04 105 views
2

我試圖產生這種Postgres的用Knex和異議SQL查詢。凡():如何使用引用,而不是在反對文本字符串值/ Knex

select * 
from "WorkoutEntry" e 
where EXISTS (
   select * 
   from "WorkoutCategory" c 
   INNER JOIN "StandardWorkoutDefinition" d on d."workoutCategoryId" = c.id 
   where c.id = 2 and e."standardWorkoutDefinitionId" = d.id 
); 

我幾乎沒有 - 但StandardWorkoutDefinition.id行始終轉換爲文字字符串,而不是引用DB中的適當列。

return await WorkoutEntry.query() 
    .whereExists(
     WorkoutCategory.query() 
     .innerJoin(
      'StandardWorkoutDefinition', 
      'StandardWorkoutDefinition.workoutCategoryId', 
      'WorkoutCategory.id', 
     ) 
     .where('WorkoutCategory.id', workoutCategoryId) 
     .where(
      'WorkoutEntry.standardWorkoutDefinitionId', 
      'StandardWorkoutDefinition.id', 
     ), 
    ) 
    .andWhere({ 
     deletedAt: null, 
     memberId, 
    }); 

如何獲得e。「standardWorkoutDefinitionId」來輸出,而不是查詢正確嗎?

回答

2

這是ref()的情況。 Where()將始終接受一個值作爲第二個比較點; whereRef()將接受一個引用。

比較,然後兩個ID:

.whereRef(
     'WorkoutEntry.standardWorkoutDefinitionId', 
     '=', 
     'StandardWorkoutDefinition.id', 
    ), 

在Objection.js 1.0,whereRef將被棄用,呼叫將是:

.where('WorkoutEntry.standardWorkoutDefinitionId', ref('StandardWorkoutDefinition.id')) 

很肯定我還缺一個更簡單的異議如何做到這一點,將在這裏尋找和更新。

更新:哇這很容易在Objection.js!

return await WorkoutEntry.query() 
    .joinRelation('standardWorkoutDefinition.workoutCategory', { 
     alias: 'category', 
    }) 
    .where('category.id', workoutCategoryId); 
相關問題