2016-08-02 55 views
0

,在某些情況下,knex不會將左連接添加到查詢中。我試圖用最少的代碼來重現該bug,所以我試圖在內存中使用knex sqlite3。由於某些原因,使用書架時缺少左連接/ knex

var knex = require('knex')({ 
    client:'sqlite3', 
    connection: { 
    filename: ":memory:" 
    }, 
    debug: true 
}); 

var bookshelf = require('bookshelf')(knex); 

var Conversation = bookshelf.Model.extend({ 
    tableName: 'conversations', 
}); 

Conversation 
    .where(qb => { 
     qb 
      .leftJoin('conversations_recipients', function() { 
       this.on('conversations_recipients.conversationId', 'conversations.id'); 
      }); 
    }) 
    .fetch(); 

當我檢查控制檯上的調試消息,我得到:

{ method: 'select', 
    options: {}, 
    bindings: [ 1 ], 
    sql: 'select "conversations".* from "conversations" limit ?' } 

還有加入缺少左的。有人知道這段代碼有什麼問題,以及如何包含所需的連接?

在此先感謝。

+0

此語法是否正確? '。'where(qb => {' – clay

+0

是的,它是es6箭頭函數,它在節點v6中運行時沒有語法錯誤 – someone235

+0

很難從最小代碼示例中判斷,但不會'Conversation.fetch({withRelated:'假設_Conversation_有一個'hasMany'關聯到一個新的模型類_Recipient_? – bgerth

回答

1

你打電話給where而不是query。除非您正在執行復雜的連接邏輯,否則您不需要使用join回調。有關wherejoin,請參閱knex文檔。和書架文檔query

Conversation.query(qb => 
    qb.leftJoin(
    'conversations_recipients', 
    'conversations_recipients.conversationId', 
    'conversations.id' 
); 
).fetch().then(conversations => { // ... 
相關問題