Передать массив в запрос postgresql - nodejs - PullRequest
0 голосов
/ 30 августа 2018

Кажется, у меня проблема с передачей массива в мой запрос и, используя условие IN, я могу успешно получить результаты, когда вручную добавляю каждый поисковый термин в запрос

async function getFixtures() {
  let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name IN ('Chinese Super League', 'Iran Pro League', 'English Premier League')");
  } catch (e) {
    console.error('Error Occurred', e);
  }
    return response.rows;
}

Когда я пытаюсь передать массив, но ничего не получаю обратно

async function getFixtures(leaguesArray) {
  let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name IN ($1)", [leaguesArray]);
  } catch (e) {
    console.error('Error Occurred', e);
  }
    return response.rows;
}

Когда я выйду из системы leaguesArray, он вернется

['Chinese Super League', 'Iran Pro League', 'English Premier League']

Итак, когда он передается в запрос, я думаю, что это

[['Chinese Super League', 'Iran Pro League', 'English Premier League']]

Нужно ли преобразовывать этот исходный массив в строку?

Я явно что-то здесь упускаю, но не знаю, что именно

Спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Как упомянуто документы . Я полагаю, что вы используете два подхода

Подход № 1

async function getFixtures(leaguesArray) {
let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name = ANY ($1)", [leaguesArray]));
  } catch (e) {
    console.error('Error Occurred', e);
  }
return response.rows;
}

Подход № 2

async function getFixtures(leaguesArray) {
let response;
const offset = 1;
const placeholders = leagueArray.map(function(name,i) { 
    return '$'+(i+offset); 
}).join(',');
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name IN (" + placeholders+")", leaguesArray));
  } catch (e) {
    console.error('Error Occurred', e);
  }
return response.rows;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...