Как создать запрос левого соединения с sails.js - PullRequest
0 голосов
/ 16 января 2019

Я хотел бы сделать оставленный запрос соединения в sails.js. Я думаю, что я должен использовать заполнить

У меня есть три модели

caracteristique{
    id,
    name,
    races:{
      collection: 'race',
      via: 'idcaracteristique',
      through: 'racecaracteristique'
    },
}

race{
    id,
    name,
    caracteristiques:{
          collection: 'caracteristique',
          via: 'idrace',
          through: 'racecaracteristique'
        }
    }

RaceCarecteristique{
idrace: {
      model:'race'
    },
idcaracteristique: {
      model: 'caracteristique'
    },
bonusracial:{
      type: 'number',
}

Мои данные:

Table Caracteristiques
id  name
1 | strength
2 | dex
3 | Charisme

Table Race
id   name 
1 | human
2 | Org

TableRaceCarecteristique
idrace idcaracteristique bonusracial
1      | 2               | +2

Этот запрос sql дает мне информацию о людях, все признаки и, если они существуют, бонусные.

'SELECT caracteristique.id, caracteristique.name, bonusracial
FROM caracteristique 
LEFT OUTER JOIN (select idcaracteristique, bonusracial 
                  from racecaracteristique 
                  where idrace=$1 ) as q 
ON  q.idcaracteristique = caracteristique.id';

У меня есть такой результат:

caracteristique.id, caracteristique.name, bonusracial
1 | strength | null
2 | dex | 2
3 | Charisme | null

Как использовать populate для этого?

1 Ответ

0 голосов
/ 21 января 2019

При использовании адаптера базы данных SQL (MySQL, PQSL и т. Д.) Вы можете использовать метод для выполнения реальных рукописных операторов SQL. Когда ничего не помогает, это может быть лучшим выбором для поиска приемлемого решения в рамках.

Метод .sendNativeQuery() отправляет ваш параметризованный оператор SQL в собственный драйвер и отвечает необработанным, не ORM-искаженным результатом. В результате появятся фактические таблицы и столбцы, относящиеся к схеме базы данных, поэтому вам следует быть осторожным с изменениями в моделях и т. Д., Так как они могут изменить схему в базовой базе данных.

Метод принимает два параметра: параметризованный запрос и массив значений для вставки. Массив является необязательным и может быть опущен, если у вас нет параметров для замены в операторе SQL.

Используя ваш уже параметризованный запрос сверху, я отправляю запрос для извлечения данных для "org" (возможно, orc?) В примере ниже. См. Документы внизу.

Кодовое время:

let query = `
SELECT caracteristique.id, caracteristique.name, bonusracial
FROM caracteristique 
LEFT OUTER JOIN (select idcaracteristique, bonusracial 
                  from racecaracteristique 
                  where idrace=$1 ) as q 
ON  q.idcaracteristique = caracteristique.id`;

var rawResult = await sails.sendNativeQuery(query, [ 2 ]);
console.log(rawResult);


Документы: .sendNativeQuery()

...