是否可以一次更新父模型和关联模型的属性?我无法使其正常工作,并且无法找到任何完整的示例。我不确定我的代码是否有问题或是否没有按照我期望的方式工作。我尝试将onUpdate:’cascade’添加到我的hasMany定义中,但这似乎无济于事。
楷模:
module.exports = function( sequelize, DataTypes ) {
var Filter = sequelize.define( 'Filter', {
id : {
type : DataTypes.INTEGER,
autoIncrement : true,
primaryKey : true
},
userId : DataTypes.INTEGER,
filterRetweets : DataTypes.BOOLEAN,
filterContent : DataTypes.BOOLEAN
},
{
tableName : 'filter',
timestamps : false
}
);
var FilteredContent = sequelize.define( 'FilteredContent', {
id : {
type : DataTypes.INTEGER,
autoIncrement : true,
primaryKey : true
},
filterId : {
type : DataTypes.INTEGER,
references : "Filter",
referenceKey : "id"
},
content : DataTypes.STRING
},
{
tableName : "filteredContent",
timestamps : false
}
);
Filter.hasMany( FilteredContent, { onUpdate : 'cascade', as : 'filteredContent', foreignKey : 'filterId' } );
sequelize.sync();
return {
"Filter" : Filter,
"FilteredContent" : FilteredContent
};
}
检索过滤器并尝试更新关联的FilteredContent对象上的属性:
Filter.find({ where: { id: 3 },
include: [ { model : FilteredContent, as : 'filteredContent' } ]
}).success ( function( filter ) {
var filteredContent = FilteredContent.build( {
filterId : filter.id,
id : 2,
content : 'crap'
});
filter.save();
});
这导致仅Filter对象中的属性被更新。如何获取它还更新FilteredContent中的属性?
另外,在定义模型后是否需要sequelize.sync()?我不清楚它到底应该做什么。我可以检索没有它的关联对象。我无奈地将其添加到我的代码中以使更新正常工作,但是我不确定是否确实必要。
谢谢
对你的问题:
当您急切地加载FilteredContent(使用include)时,已经构建了一个模型实例,因此没有理由调用build
。类似的事情应该做你想要的:
Filter.find({
where: { id: 3 },
include: [ { model : FilteredContent, as : 'filteredContent' } ]
}).then ( function( filter ) {
return filter.filteredContent[0].updateAttributes({
content: 'crap'
})
}).then(function () {
// DONE! :)
});
有关您整体发布的代码的几点建议:
编辑以回答您的评论:
您不能执行将同时更新过滤器内容和已过滤内容的单个函数调用,但是您也不必按顺序进行更新。您可以发出所有更新命令,而无需等待它们完成。
Filter.find({
where: { id: 3 },
include: [ { model : FilteredContent, as : 'filteredContent' } ]
}).then ( function( filter ) {
return Promise.all([
filter.updateAttributes({}),
filter.filteredContent.map(fc => fc.updateAttributes({}))
]);
}).spread(function (filter, filteredContents) {
})
这样,所有查询将并行运行,并且所有查询完成后将调用then函数。请注意,我在spread
这里已使用过将返回的数组Promise.all
转换为单独的参数。
问题内容: 为什么在我的某些模型中序列化不会为 Foreignkey 创建新列?但是它确实为其他模型创建了??? 令人沮丧和奇怪。例如,在此用户模型中,不会创建sequelize 。 这是一个类似的问题:不会创建模型关联列但不能创建!没有回答。 我已经花了几个小时,我做了所有类似的事情: 仔细阅读以下内容:https : //sequelize.org/master/manual/assocs.h
问题内容: 我有两个模型。用户和管理员 用户模型 经理模式 缩小模型以简单地解决问题 协会.. 因此,在user.findAll()上 我得到以下内容。 如何将’ManagerName’属性从Manager模型(关联为RM)移动到UserObject?是否可以以某种方式从急切加载的模型中加载属性,而无需将它们嵌套在单独的对象下?我希望得到的对象看起来像对象 预期对象- 谢谢你。 问题答案: 与op
问题内容: 我正在尝试通过联接表的属性过滤查询 我有2个表“城市和类别”,我正在通过第三个表CityCategory进行关联。想法是在时获取与城市关联的类别。是一个特定的整数。 这就是我指定关联的方式: 这是我当前使用的查询,未成功使用: 不幸的是,我不确定如何告诉续集使用CityCategory的year属性,而不是在Category模型中搜索名为“ year”的属性… 这是可能的还是我必须手动
我正在尝试删除与表中一行相关联的行,而不删除主行(因此不能使用级联)。 这是一个原始的PostgreSQL查询,它实现了我想用SQL实现的功能。sequelize是否能够生成这样查询: 模型是(不包括不相关的列): 关联在SEQELIZE中定义为: 查询的另一个版本可以是: 但我认为sequelize还不能处理子查询? 我尝试了一些类似的方法: 然而,后遗症抱怨道: 错误:Model.Destro
通过预先确定好模型之间的关系,在业务开发中,使用非常简便的写法,就可以实现复杂的涉及多表数据增删改查。 这一切都是模型底层实现帮你在处理,在 imi 中,模型的关联关系都使用注解来定义。 注解 这里列出定义模型关联关系所需的注解,所有关联模型的注解,命名空间为Imi\Model\Annotation\Relation @OneToOne 一对一关系声明 用法: @OneToOne("模型类名")
问题内容: 我有两个表,和。中的每个条目都有一个指向的外键。使用Sequelize,如何获取与中的每个条目相关联的所有条目以及其中的条目总数? 原始SQL: 楷模: 问题答案: 使用与和为: 或者,您可能还需要添加一个: