无法与Sequelize建立一对一关系

多美

我宣布:

Item.hasOne(Item, { foreignKey: 'parentAid', as: 'Parent' })

我询问:

Item.find({where : {aid: aid}, include: [Item]}).complete(function(err, article) { .. };

我得到:

Error: Item is not associated to Item!

我究竟做错了什么?

................................................... .....................................................

更新1

感谢Jan Aargaard Meier的有用回答,我得以将事情更改为:

ItemModel.belongsTo(ItemModel, { foreignKey: 'parentAid', as: 'Parent', foreignKeyConstraint: true });
ItemModel.hasMany(ItemModel, { as: 'Children', constraints: false });

this.articleRelations.push({
    model: ItemModel,
    as: 'Parent'
});

this.articleRelations.push({
    model: ItemModel,
    as: 'Children'
});

// ...

我的查询现在是:

{where : {aid: aid}, include: this.articleRelations}

但是我收到以下错误:

{
code : "ER_BAD_FIELD_ERROR",
errno : 1054,
sqlState : "42S22",
index : 0,
sql : "SELECT `item`.*, `Parent`.`aid` AS `Parent.aid`, `Parent`.`gid` AS `Parent.gid`, `Parent`.`title` AS `Parent.title`, `Parent`.`type` AS `Parent.type`, `Parent`.`parentAid` AS `Parent.parentAid`, `Parent`.`createdAt` AS `Parent.createdAt`, `Parent`.`updatedAt` AS `Parent.updatedAt`, `Parent`.`itemId` AS `Parent.itemId`, `Parent`.`aid` AS `Parent.aid`, `Parent`.`aid` AS `Parent.aid`, `Parent`.`aid` AS `Parent.aid`, `Children`.`aid` AS `Children.aid`, `Children`.`gid` AS `Children.gid`, `Children`.`title` AS `Children.title`, `Children`.`type` AS `Children.type`, `Children`.`parentAid` AS `Children.parentAid`, `Children`.`createdAt` AS `Children.createdAt`, `Children`.`updatedAt` AS `Children.updatedAt`, `Children`.`itemId` AS `Children.itemId`, `Children`.`aid` AS `Children.aid`, `Children`.`aid` AS `Children.aid`, `Children`.`aid` AS `Children.aid` FROM (SELECT `item`.* FROM `item` WHERE `item`.`aid`=2 LIMIT 1) AS `item` LEFT OUTER JOIN `item` AS `Parent` ON `Parent`.`aid` = `item`.`parentAid` LEFT OUTER JOIN `item` AS `Children` ON `item`.`aid` = `Children`.`itemId`;"

}

注意:*表名是item*查询包含itemId,我没有在任何地方定义。那似乎是个错误?

供参考,这是我的模型:

ItemModel = sequelize.define('ExerciseItem', {
        aid: {type: Sequelize.INTEGER.UNSIGNED, primaryKey: true, autoIncrement: true},
        gid: {type: Sequelize.INTEGER.UNSIGNED},
        title: Sequelize.STRING(100),
        type: Sequelize.INTEGER.UNSIGNED,
        parentAid: Sequelize.INTEGER.UNSIGNED
    },{
        freezeTableName: true,
        tableName: 'item'
});
扬·阿加德·迈耶(Jan Aagaard Meier)
Item.find({where : {aid: aid}, include: [{ model: Item, as: 'Parent' }])

如果为关系提供别名,则在进行急切加载时必须提供该别名(就像您要调用getParent而不是getItem在项目实例上调用一样

这是因为别名(使用as)允许您创建与同一模型的多个关联,因此当您仅提供模型时,就没有办法让续集知道您实际要加载哪个模型。

我们一直在谈论使用关系调用的返回值的能力,例如:

var itemParentRelation = Item.hasOne(Item, { foreignKey: 'parentAid', as: 'Parent' })
Item.find({where : {aid: aid}, include: [itemParentRelation])
// or
Item.find({where : {aid: aid}, include: [item.relations.parent])

但是现在您必须使用帖子开头提供的代码:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在实体之间建立一对一关系

来自分类Dev

建立一对一关系

来自分类Dev

模式中建立一对一关系的方法?

来自分类Dev

一对一关系与建立联系

来自分类Dev

插入一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

一对一关系插入

来自分类Dev

休眠一对一关系

来自分类Dev

GSON一对一关系

来自分类Dev

休眠一对一关系

来自分类Dev

一对一关系

来自分类Dev

MYSQL一对一关系

来自分类Dev

实现一对一关系

来自分类Dev

与查询的一对一关系

来自分类Dev

Laravel 5:建立一对一关系时的鸡肉和鸡蛋

来自分类Dev

学说–如何在两个实体之间建立一对一关系

来自分类Dev

实体框架代码首先在复杂实体之间建立一对一关系

来自分类Dev

如何使用“数据库优先”建立一对一关系?

来自分类Dev

Laravel Seeding 使用 Factory 建立一对一关系

来自分类Dev

与 EF 中的许多表建立一对一关系

来自分类Dev

定义了 2 个模型之间的一对一关系,但似乎仍然能够建立一对多

来自分类Dev

EF Core中的一对一关系(无法确定孩子/受抚养人之间的一对一关系)

来自分类Dev

与同一模型的雄辩一对一关系

来自分类Dev

休眠一对一关系错误

来自分类Dev

SQL一对一关系与单个表

来自分类Dev

亲子一对一关系表

来自分类Dev

Symfony2一对一关系表

来自分类Dev

laravel一对一关系:交换方法