2016-07-05 3 views
0

特定のMySQLクエリをKnexに複製するのは難しいです(私はBookshelfをORMとして使用しています)。 SQLクエリ自体は、MySQLターミナルで直接データベースにクエリを実行するときに、正しいデータセットを返します。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の構文が間違っている知っているが、私は(私は配列構文を疑うところはよく分かりませんKnexクエリの1行目...)&私の人生にとって、SQLをどのように翻訳するかを理解することはできません。テーブル 'processed_articles_trends'は、テーブル 'processed_articles'と 'trends'テーブルの間の結合テーブルを表します。

私が最初に私の本棚モデルの定義と「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を使用して構築できないクエリをハードコードするために使用されます。注文がどのように結果に影響を与えるかはわかりません。 –

関連する問題