如何使用 sails.js 创建左连接查询

how create left join query with sails.js

我想在 sails.js 中执行 left 连接查询。我想我应该使用 populate

我有三个模型

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 请求给我人类,所有特性和如果存在 bonusracial

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

我有这个结果:

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

如何使用填充来做到这一点?

当使用 SQL 数据库适配器(MySQL、PQSL 等)时,您可以使用一种方法来执行实际的手写 SQL 语句。当所有其他方法都失败时,这可能是您在框架内找到可接受的解决方案的最佳选择。

.sendNativeQuery() 方法将您的参数化 SQL 语句发送到本机驱动程序,并以原始的、非 ORM 损坏的结果作为响应。结果中会出现实际的数据库架构特定表和列,因此您需要小心更改模型等,因为它们可能会更改后端数据库中的架构。

该方法有两个参数,参数化查询和要插入的值数组。该数组是可选的,如果您在 SQL 语句中没有要替换的参数,则可以省略该数组。

使用上面已经参数化的查询,我正在发送查询以获取下面示例中 "org"(也许是兽人?)的数据。请参阅底部链接的文档。

代码时间:

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

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


文档: .sendNativeQuery()