查询生成器在AdonisJS中返回联接结果和原始查询的空值

时间:2019-01-14 09:33:02

标签: mysql node.js knex.js adonis.js

我想通过 Database.raw 在查询生成器的 select 查询中获得 count 个结果,但是当我的主表为空时,除 Database.raw 结果外,我查询的所有字段均为null

这是我的查询:

const jobs = await Database.table('jobs')
  .leftJoin('job_offers', 'jobs.id', 'job_offers.job_id')
  .select([
    Database.raw(`'job' as type`),
    Database.raw('COUNT(jobs.id) as offers_count'),
    'jobs.id', 'title', 'jobs.description', 'jobs.created_at',
  ])
  .limit(limit).offset(offset)

我的查询结果是:

[
    {
        "type": "job",
        "offers_count": 0,
        "id": null,
        "title": null,
        "description": null,
        "created_at": null
    }
]

在上面的查询中,当我的[]表中没有任何行时,结果必须为job

更新

这是上述查询构建器方法的SQL命令,它们返回[]作为结果

SELECT 
    'job' AS type,
    jobs.id, jobs.title, description, jobs.created_at,
    COUNT(job_offers.id) as offers_count

    FROM jobs
LEFT JOIN job_offers ON jobs.id = job_offers.id

我的查询出了什么问题?

1 个答案:

答案 0 :(得分:-2)

您正在使用leftJoin,如果您不希望结果为空,则应该使用innerJoin或join(两者都做同样的事情)。

const jobs = await Database.table('jobs')
  .join('job_offers', 'jobs.id', 'job_offers.job_id')
  .select([
    Database.raw(`'job' as type`),
    Database.raw('COUNT(jobs.id) as offers_count'),
    'jobs.id', 'title', 'jobs.description', 'jobs.created_at',
  ])
  .limit(limit).offset(offset)