将MySQL查询转换为Knex QueryBuilder语法等效?

时间:2016-07-05 21:57:03

标签: javascript mysql bookshelf.js knex.js

我很难将特定的MySQL查询复制到Knex(我使用Bookshelf作为ORM)。在MySQL终端中直接查询数据库时,SQL查询本身会返回正确的数据集。

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 '表之间的连接表。

我最初尝试使用我的Bookshelf模型定义和'withRelated'参数,但是Bookshelf正在执行一些巫术,这让我很难确定如何从'出版物中撤回我需要的字段'table。

感谢任何见解 - 非常感谢。

1 个答案:

答案 0 :(得分: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')