Sequelize include(如何构造查询)?
Sequelize include (how to structure query)?
我有一个查询要尝试基于一对多关系执行。
例如,有一个名为用户的模型和一个名为项目的模型。
用户有许多项目
项目有很多类型,存储在类型(枚举)列中。有 4 种不同的类型可能是我想要加载的用户可能拥有的类型。要注意的是,我想为可能存在的所有网络包含最新的项目记录(createdAt 列)。我还没有找到一种方法来构造查询以使其作为包含工作。但是,我找到了一种方法来执行原始查询,它可以满足我的要求。
我正在寻找一种无需进行原始查询的方法。通过执行原始查询,我必须将返回的结果映射到我从其他方法返回的用户,或者我必须执行一个简单的包含,然后 trim 关闭所有不是最新的结果。后者很好,但我看到这会变慢,因为用户会有很多项目,而且它会保持稳定增长。
这允许序列化一个 json 以用于任何关于模型的操作。读了,很好
// define models
var Person = sequelize.define('Person', { name: Sequelize.STRING });
var Task = sequelize.define('Task', {
name: Sequelize.STRING,
nameWithPerson: {
type: Sequelize.VIRTUAL,
get: function() { return this.name + ' (' + this.Person.name + ')' }
attributes: [ 'name' ],
include: [ { model: Person, attributes: [ 'name' ] } ],
order: [ ['name'], [ Person, 'name' ] ]
}
});
// define associations
Task.belongsTo(Person);
Person.hasMany(Task);
// activate virtual fields functionality
sequelize.initVirtualFields();
我有一个查询要尝试基于一对多关系执行。 例如,有一个名为用户的模型和一个名为项目的模型。
用户有许多项目
项目有很多类型,存储在类型(枚举)列中。有 4 种不同的类型可能是我想要加载的用户可能拥有的类型。要注意的是,我想为可能存在的所有网络包含最新的项目记录(createdAt 列)。我还没有找到一种方法来构造查询以使其作为包含工作。但是,我找到了一种方法来执行原始查询,它可以满足我的要求。
我正在寻找一种无需进行原始查询的方法。通过执行原始查询,我必须将返回的结果映射到我从其他方法返回的用户,或者我必须执行一个简单的包含,然后 trim 关闭所有不是最新的结果。后者很好,但我看到这会变慢,因为用户会有很多项目,而且它会保持稳定增长。
这允许序列化一个 json 以用于任何关于模型的操作。读了,很好
// define models
var Person = sequelize.define('Person', { name: Sequelize.STRING });
var Task = sequelize.define('Task', {
name: Sequelize.STRING,
nameWithPerson: {
type: Sequelize.VIRTUAL,
get: function() { return this.name + ' (' + this.Person.name + ')' }
attributes: [ 'name' ],
include: [ { model: Person, attributes: [ 'name' ] } ],
order: [ ['name'], [ Person, 'name' ] ]
}
});
// define associations
Task.belongsTo(Person);
Person.hasMany(Task);
// activate virtual fields functionality
sequelize.initVirtualFields();