Запрос knex с объединением в 3 таблицы

#mysql #node.js #express #knex.js

#mysql #node.js #экспресс #knex.js

Вопрос:

У меня возникли проблемы с выполнением приведенного ниже запроса с knex. Мне удалось создать соединение с двумя таблицами, но это соединение с 3 таблицами, где идентификатор элемента транспортного средства равен = x, я его не получаю.

Ниже следует sql-запрос и то, как я безуспешно пытался использовать knex.

Заранее большое вам спасибо!

 SELECT v.id   AS id_veiculo, 
       v.placa, 
       v.marca, 
       v.exibicao, 
       v.modelo, 
       v.renavam, 
       v.chassi, 
       v.ano_fabri, 
       v.ano_modelo, 
       v.id_combustivel, 
       v.capacidade_litros, 
       v.cor, 
       v.uf_placa, 
       v.status, 
       t.id   AS id_servico, 
       t.servico, 
       c.nome AS combustivel 
FROM   veiculo v 
       INNER JOIN tipo_servico_veiculo tsv 
               ON tsv.veiculo_id = v.id 
                  AND v.id = :id 
       INNER JOIN tipo_servico t 
               ON t.id = tsv.servico_id 
       INNER JOIN combustivel c 
               ON c.id = v.id_combustivel 
 

knex, версия: «^ 0.21.2»

 const result = await knex('veiculo as v')
  .join('tipo_servico_veiculo as tsv', function () {
    this.on('tsv.veiculo_id', '=', 'v.id').andOn('v.id', '=', id);
  })
  .join('tipo_servico t', 't.id', '=', 'tsv.servico_id')
  .join('combustivel as c', 'v.id_combustivel', '=', 'c.id')
  .select(
    'v.id',
    'v.placa',
    'v.marca',
    'v.exibicao',
    'v.modelo',
    'v.cor',
    'v.status',
    'c.nome as combustivel',
    't.servico'
  );
 

Комментарии:

1. Ваш knex statment выглядит нормально для меня, в чем проблема? вы пытались добавить .debug() в конце, чтобы отладить построенный запрос?

2. Спасибо за совет, @felixmosh! один из способов, который сработал, был следующим: const result = await knex(‘cnh как c’) .join(‘categoria_cnh как cat’, ‘c.categoria_id’, ‘=’, ‘cat.id ‘) .присоединиться(‘motorista as m’, ‘c.motorista_id’, ‘=’, ‘m.id ‘) .где(‘c.id ‘, ‘=’, id) .select(‘c.numero’, ‘c.vencimento’, ‘cat.id как categoria_id’, ‘cat.categoria’, ‘m.id как motorista_id’, ‘m.exibicao’);