我试图在Sequelize中加入两张桌子:
const results = await MainModel.findAll({ include: [ JoinedModel ] });
但是,当我尝试从连接表中访问数据时,TypeScript(至少在--strict
模式下)会抱怨:
const joinedField = results[0].joinedModel.joinedField;
导致:
Property 'joinedModel' does not exist on type 'Instance<MainModelAttributes>'.
尽管有TypeScript的投诉,上面的代码确实实际上为我提供了加入字段中的值。
输入此内容的正确方法是什么? (我在这里正确使用Sequelize吗?)
答案 0 :(得分:0)
那是因为findAll
的结果是承诺。试试这个:
MainModel.findAll({ include: [ JoinedModel ] }).then(result => {
your code here...
});
答案 1 :(得分:0)
您可以执行类似的操作,因为sequelize函数会将结果作为包含sequelize元数据的模型实例返回。因此,通过对响应进行字符串化和解析,您可以获得结果的JSON表示形式。
let results = await MainModel.findAll({ include: [ JoinedModel ] });
results = JSON.parse(JSON.stringify(results));
const joinedField = results[0].joinedModel.joinedField;
OR
您可以使用原始的查询选项来将响应作为纯json获取。
let results = await MainModel.findAll({raw: true, include: [ JoinedModel ] });
答案 2 :(得分:0)
您可以以这种方式强制转换结果。
const results = await MainModel.findAll({ include: [ JoinedModel ] }) as Array<MainModel & {JoinedModel: JoinedModel}>;