#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’);