查询()方法中的sequelize options.nest并不起作用

时间:2017-07-07 13:24:33

标签: javascript node.js postgresql sequelize.js

我有一个像

这样的原始查询
squelize.query(
   `select "order".id, "orderCustomer".id as "orderCustomer.id", "orderCustomer".forename as "orderCustomer.forename" 
    from orders as "order"
    join customers as "orderCustomer" on "orderCustomer".id = "order"."orderCustomerId"
    where "orderCustomer".forename ilike '%petra%';`,
{
    type: Sequelize.QueryTypes.SELECT, 
    model: order,
    nest: true,
    mapToModel: true
})

当我在psql中查询时,我得到了一个正确的结果集:

-[ RECORD 1 ]----------+------
id                     | 383
orderCustomer.id       | 446
orderCustomer.forename | Petra
-[ RECORD 2 ]----------+------
id                     | 419
orderCustomer.id       | 9
orderCustomer.forename | Petra

问题是,Sequelize显然无法将其形成为一种类型的

[
 {
   id: 383,
   orderCustomer: {
      id: 446,
      forename: 'Petra'
   }
 },
   ...
]

相反,我得到这样的东西:

[
 {
   id: 383,
   'orderCustomer.id': 446,
   'orderCustomer.forename': 'Petra'
 },
   ...
]

我是否需要include查询的选项对象中的客户模型?

更新

我记录了查询结果。所有返回的订单实例都有此属性_options

_options:{ 
   isNewRecord: false,
   _schema: null,
   _schemaDelimiter: '',
   raw: true, // <--------- possible cause?
   attributes: undefined 
}

不知何故,我无法在查询定义中将options.raw设置为false!也许这就是为什么......

  

... sequelize不会尝试格式化查询结果,也不会根据结果构建模型实例(参见docs > query() > options.raw

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我正在使用您的解决方案:nest:true,它运行完美!

[err, rows] = await to(sequelize.query(query,{ replacements: { search: '%'+search+'%', limit: limit, offset: skip}, type: sequelize.QueryTypes.SELECT,nest: true}));

答案 1 :(得分:0)

假设您已正确设置模型,

为什么不使用关联来查询它,而不是使用原始查询。 这样的事情会产生类似的结果

Model.Order.findAll({
  where:{forename:{$iLike:'someString'}},
  attributes:[/*Columns to fetch*/]
  include:[{model:Model.Customer,attributes:[/*Columns to fetch*/]}]
});

此外IMO使用嵌套属性,不会返回多行的俱乐部。

答案 2 :(得分:0)

我遇到了同样的问题,并以这种方式使其工作:

        sequelize.query(
            `SELECT q.id, q.title, a.id AS "answers.id"
               FROM questions q
               JOIN answers a ON a.question_id = q.id`,
                model: Question,
                mapToModel: true,
                nest: true,
                raw: true,
                type: sequelize.QueryTypes.SELECT }
        )

答案 3 :(得分:0)

试试没有

model: order,

这为我解决了