【问题标题】:X is not associated to YX 与 Y 无关
【发布时间】:2016-11-20 06:30:40
【问题描述】:

我一直在大量关注 sequelize 的文档,但在涉及关系时遇到了问题。这是我非常简单的代码,使用 belongsTo 创建两个非常基本的 1:1 关系

import Sequelize, { STRING, INTEGER, TEXT } from 'sequelize';

const sequelize = new Sequelize('dbname', '', '');

const User = sequelize.define('user', {
    name: STRING,
    age: INTEGER
});

const Item = sequelize.define('item', {
    name: STRING,
    price: INTEGER
});

Item.belongsTo(User);

sequelize.sync({ force: true }).then(() => {
    User.create({
        name: 'Hobbyist',
        age: 22,
        Item: {
            name: 'Phone',
            price: 199
        }
    }, {
        include: [ Item ]
    });
});

我得到的错误:

Unhandled rejection Error: item is not associated to user!

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    Sequelize 处理互惠关系。

    所以如果你想拥有Items belong to User,你可能也想拥有User has one Item

    在您的情况下,您将用户关联到项目,但没有将项目关联到用户。所以让我们添加:

    Item.belongsTo(User);
    User.hasOne(Item); // this line
    

    现在 Sequelize 知道每个用户都有一个 Item,这可以让我们有机会进行 JOIN 查询。

    库处理关联属性的方式是通过表名。因此,在您的情况下,您还需要将 Item 重命名为 item,如下所示:

    User.create({
        name: 'Hobbyist',
        age: 22,
        item: {
     // ^ item, not Items
            name: 'Phone',
            price: 199
        }
    }, {
        include: [ Item ]
    });
    

    【讨论】:

    • 谢谢,我不知道'Item -> item'这件事,开始滥用别名'。Sequelize 越来越棒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2019-05-13
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多