Извлекать дочерние элементы родительской таблицы как подчиненное свойство при извлечении родителей - PullRequest
0 голосов
/ 07 марта 2020

У меня есть две таблицы: jobs и checklists. Каждая запись в jobs может содержать один или несколько элементов контрольного списка; Итак, контрольный список имеет jobId INT(11) в качестве ключа.

Я хочу сделать запрос на jobs, и иметь checklists доступным для меня как jobs.checklists.

Это то, что В настоящее время я делаю:

    const jobs = (await this.stores.jobs.implementQuery({
      session: request.session,
      options: { ranges: { limit: 300 }, conditionsHash: { jobId: request.params.jobId } }
    })).data

    const jobIds = jobs.map(j => j.id).join(',')

    const allChecklists = (await this.stores.checklists.implementQuery({
      session: request.session,
      options: { ranges: { limit: 5000 }, conditionsHash: { jobIds } }
    })).data

    for (let i = 0, l = jobs.length; i < l; i++) {
      jobs[i] = { ...jobs[i] }
      const job = jobs[i]

      job.checklists = allChecklists.filter(c => c.jobId === job.id)

Где jobIds - это список идентификаторов заданий, разделенных запятыми, и что conditionsHash: { jobIds } обеспечит, чтобы таблица контрольных списков выполняла запросы с AND jobId IN (?,?,?,...) - для каждого Идентификатор работы.

Да, это ужасно. Но по соображениям производительности я не могу выполнить запрос на задание, поскольку это может означать до 300 запросов.

Есть ли более близкий способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...