2016-07-05 130 views
0

我很難將特定的MySQL查詢複製到Knex中(我正在使用Bookshelf作爲ORM)。當在MySQL終端中直接查詢數據庫時,SQL查詢本身返回正確的數據集。將MySQL查詢轉換爲Knex QueryBuilder語法等效項?

MySQL查詢:

SELECT processed_articles.*, publications.pub_name 
FROM processed_articles 
INNER JOIN processed_articles_trends ON processed_articles_trends.processed_article_id = processed_articles.id 
INNER JOIN publications ON publications.id = processed_articles.pub_id 
WHERE (processed_articles_trends.trend_id = 2); 

Knex的QueryBuilder:

knex.select(['publications.pub_name', 'processed_articles.*']) 
    .innerJoin('processed_articles_trends', 'processed_articles.id', 'processed_articles_trends.processed_article_id') 
    .innerJoin('publications', 'processed_articles.pub_id', 'publications.id') 
    .where('processed_articles_trends.trend_id', '=', 2); 

我知道Knex語法不正確,但我不知道在那裏(我懷疑陣列語法第1行的Knex查詢...)&不能爲我的生活弄清楚如何翻譯SQL。表'processed_articles_trends'表示表'processed_articles'和'趨勢'表之間的聯接表。

我最初嘗試使用我的書架模型定義和「withRelated」參數,但書架中,使得它很難引擎蓋下執行一些巫術我確定如何給拉了回來我從'出版物所需的場'表。

感謝任何見解 - 非常感謝。

回答

1
knex('processed_articles') 
    .innerJoin('processed_articles_trends', 'processed_articles.id', 'processed_articles_trends.processed_article_id') 
    .innerJoin('publications', 'processed_articles.pub_id', 'publications.id') 
    .where('processed_articles_trends.trend_id', '=', 2) 
    .select(db.raw('processed_articles.*')) 
    .select('publications.pub_name') 
+0

謝謝Shriram。出於興趣,我的方法的主要缺陷是什麼?什麼是db.raw()方法,以及這些語句的排序如何影響結果?非常感謝! – lensvelt

+1

db.raw()用於通常對使用knex無法構建的查詢進行硬編碼。我不確定排序如何影響結果。 –

相關問題