如何修复EntitySchema中一对一关系的“无法读取未定义的属性'joinColumns'of undefined”错误

时间:2019-11-04 17:23:23

标签: graphql typeorm

我有2个产品集ProductVariant和Inventory

module.exports = new EntitySchema({
    name: 'ProductVariant',
    target: ProductVariant,
    columns: {
        id: {
            primary: true,
            type: 'varchar',
        },
        image: {
            type: 'json',
            nullable: true,
        },
        productId: {
            type: 'varchar',
        },
    },
    relations: {
        product: {
            target: 'Product',
            type: 'many-to-one',
            joinColumn: {
                name: 'productId',
            },
        },
        inventory: {
            target: 'Inventory',
            type: 'one-to-one',
            inverseSide: 'variantId',
            cascade: true,
        },
    },
});

和库存

const EntitySchema = require('typeorm').EntitySchema;
const Inventory = require('../models/inventory').Inventory;

module.exports = new EntitySchema({
    name: 'Inventory',
    target: Inventory,
    columns: {
        id: {
            type: 'varchar',
            primary: true,
            unique: true,
        },
        sku: {
            type: 'varchar',
            nullable: true,
        },
        variantId: {
            type: 'varchar',
        }
    },
    relations: {
        variant: {
            target: 'ProductVariant',
            type: 'one-to-one',
            cascade: true,
            joinColumn: {
                name: 'variantId',
            },
        },
    },
});

现在,如果我运行此查询

const products = await ProductRepo.find({ relations: ['collections', 'variants', 'variants.inventory'] });

我收到一个错误,说Cannot read property 'joinColumns' of undefined

在我的数据库中,这些关系是完美建立的。唯一可能出错的地方是,没有从变体到库存的路径,但是有从库存到变体的路径。因此,这不是两方面的事情。一侧只有一对一,但ORM应该足够聪明才能正确选择它? 那是这里唯一的事情。

有人可以告诉我如何解决此问题。

1 个答案:

答案 0 :(得分:0)

所以这里的错误很简单。相反,您没有提及列名,而是提及关系。就我而言,如果您看到我提到了variantId,将其替换为variant,请为我修复。