我在加载OneToMany-ManyToOne关系中遇到困难。在此问题/错误中,我只包含真正影响到它们的部分。
GuildInfraction
:
@Entity()
class GuildInfraction extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
guild_id: string;
@Column()
moderator_id: string;
@Column()
user_id: string;
@ManyToOne((_) => GuildSettings, (settings) => settings.infractions)
@JoinColumn()
guild: GuildSettings;
@ManyToOne((_) => UserSettings, (settings) => settings.infractions)
@JoinColumn()
moderator: UserSettings;
@ManyToOne((_) => UserSettings, (settings) => settings.infractions)
@JoinColumn()
user: UserSettings;
}
GuildSettings
:
@Entity()
class GuildSettings extends BaseEntity {
@PrimaryColumn()
id: string;
@OneToMany((_) => GuildInfraction, (infraction) => infraction.guild, { eager: true })
infractions: GuildInfraction[];
}
UserSettings
:
@Entity()
class UserSettings extends BaseEntity {
@PrimaryColumn()
id: string;
@OneToMany((_) => GuildInfraction, (infraction) => infraction.user, { eager:true })
infractions: GuildInfraction[];
}
这里是如何使用它的一个示例,当然,我创建了自己的班级管理器以使其更容易使用:
// Create a guild instance.
const guild = new GuildSettings();
guild.id = "554742955898961930";
guild.infractions = [];
await guild.save();
// Create a user instance.
const user = new UserSettings();
user.id = "389472120981291008";
user.infractions = [];
// Create another user instance.
const moderator = new UserSettings();
moderator.id = "506627462588006400";
moderator.infractions = [];
// Create a infraction instance and attach the previous guild, user, and moderator instances to it.
const infraction = new GuildInfraction();
infraction.guild = guild;
infraction.guild_id = guild.id;
infraction.user = user;
infraction.user_id = user.id;
infraction.moderator = moderator;
infraction.moderator_id = moderator.id;
await infraction.save();
以下是尝试使用连接存储库通过getRepository
检索违规的示例:
// Through the GuildSettings repository.
const connection = getRepository(GuildSettings);
console.log((await connection.findOne("554742955898961930")).infractions); // Returns an empty array: '[]'
// Through the UserSettings repository.
const connection = getRepository(UserSettings);
console.log((await connection.findOne("389472120981291008")).infractions); // Returns an empty array '[]'
// Through the GuildInfraction repository to retrieve the guild.
const connection = getRepository(GuildInfraction);
console.log((await connection.find())[0].guild); // Returns 'undefined'
// Through the GuildInfraction repository to retrieve the user.
const connection = getRepository(GuildInfraction);
console.log((await connection.find())[0].user); // Returns 'undefined'
// Through the GuildInfraction repository to retrieve the moderator.
const connection = getRepository(GuildInfraction);
console.log((await connection.find())[0].moderator); // Returns 'undefined'
我们将非常感谢您的帮助!
答案 0 :(得分:0)
GuildSettings中的activation_model = models.Model(inputs=model.input, outputs=layer_outputs)
字段不是给您问题吗?它应该引发“重复列“ guild_id””错误IIRC。顺便说一句,在GuildInfraction中,您有两个与UserSettings的ManyToOne关系,该关系的反面映射到相关实体的相同字段。我不确定这是您的orm支持的东西。