【发布时间】:2020-05-24 08:01:13
【问题描述】:
我在加载 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'
非常感谢您的帮助!
【问题讨论】:
标签: typescript typeorm