2016-08-02 6 views
0

Aus irgendeinem Grund fügt knex in einigen Fällen keine linke Verknüpfung zur Abfrage hinzu. Ich habe versucht, den Fehler mit minimalem Code zu reproduzieren, also habe ich versucht, knex mit in-memory sqlite3 zu verwenden.Fehlender linker Join bei Verwendung von bookshelf/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(); 

Wenn ich die Debug-Meldungen auf der Konsole zu überprüfen, die ich erhalten:

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

Und es gibt die linke Verknüpfung fehlt. Jemand weiß, was mit diesem Code nicht stimmt und wie kann ich den gewünschten Join einfügen?

Vielen Dank im Voraus.

+0

Ist diese Syntax korrekt? '.where (qb => {' – clay

+0

Ja, es ist es6 Pfeilfunktion. Es läuft ohne Syntaxfehler in Knoten v6. – someone235

+0

Es ist schwer, von Ihrem minimalen Codebeispiel zu beurteilen, aber würde nicht 'Conversation.fetch ({withRelated: ' Empfänger '}) 'geben Sie das erwartete Ergebnis, vorausgesetzt _Conversation_ hatte eine' hasMany' Zuordnung zu einer neuen Modellklasse _Recipient_? – bgerth

Antwort

1

Sie rufen where anstelle von query an. Außerdem müssen Sie den Rückruf join nicht verwenden, es sei denn, Sie führen eine komplexe Verknüpfungslogik aus. Siehe die Knex-Dokumentation für und join. Und Bücherregaldokumentation für query

Conversation.query(qb => 
    qb.leftJoin(
    'conversations_recipients', 
    'conversations_recipients.conversationId', 
    'conversations.id' 
); 
).fetch().then(conversations => { // ... 
Verwandte Themen