我很难将特定的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。
感谢任何见解 - 非常感谢。
答案 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')