TypeORM getRepository.find() 不包括外键字段
Posted
技术标签:
【中文标题】TypeORM getRepository.find() 不包括外键字段【英文标题】:TypeORM getRepository.find() does not include Foreign Key Fields 【发布时间】:2019-11-20 18:59:42 【问题描述】:我正在尝试获取我的 entity
中包含的所有列,但我只能获取与其他实体没有任何关系的列。
我使用这个代码块来获取所有行到这个存储库。
private translationTextRepository = getRepository(TranslationText);
async all(request: Request, response: Response, next: NextFunction)
return this.translationTextRepository.find();
这是此存储库的entity
。
@Entity('TranslationText')
export class TranslationText
@PrimaryGeneratedColumn()
ID: number;
@Column()
CreatedBy: string;
@Column( type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' )
CreatedDate: Date;
@Column()
Status: boolean;
@Column( nullable: true, default: null )
ModifiedBy: string;
@Column( type: 'timestamp', nullable: true, default: null )
ModifiedDate: Date;
@Column()
Text: string;
@ManyToOne((type) => Locale, (locale) => locale.ID)
@JoinColumn( name: 'LocaleID' )
LocaleID: Locale;
@ManyToOne((type) => TranslationTitle, (translationTitle) => translationTitle.ID)
@JoinColumn( name: 'TranslationTitleID' )
TranslationTitleID: TranslationTitle;
但我只能获取除LocaleID
和TranslationTitleID
之外的所有列。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:查看此文档: https://typeorm.io/#/relations-faq/how-to-use-relation-id-without-joining-relation 解决方案:
定义新列:
@column() LocaleID:数字
将旧的重命名为:Locale
但是由于外键问题,typeOrm 无法同步您的表。
-
在@ManyToOne(eager: true) 中使用eager 选项
搜索结果将包含关系 Locale 对象,您可以从中获取 id。
【讨论】:
2020 年 12 月,我正要让 #1 工作。我必须做的唯一修改是对不可为空的 ID 列的种子文件。从this.user = context?.user
到this.userId = context?.user?.id
。定义 id 列优于预先加载或定义关系。仅获取 FK(与所有字段相比)可提高性能。此外,当您尝试保存具有嵌套对象的模型时,完整查询可能会导致错误:服务器可能会尝试覆盖数据库中的那些嵌套对象。明确定义 FK id 可以让您获得最大的控制权。
另外,拥有 id 列使find
更容易一些。比较 let findOpt = where:user:id:'asdf'
与 let findOpt = where: userId: 'asdf'
... await ModelClass.find(findOpt)
【参考方案2】:
你能尝试指定这样的关系吗:
async all(request: Request, response: Response, next: NextFunction)
return this.translationTextRepository.find(
relations:["LocaleID","TranslationTitleID"]
);
因为您必须明确表示您希望查询中的关系。
【讨论】:
以上是关于TypeORM getRepository.find() 不包括外键字段的主要内容,如果未能解决你的问题,请参考以下文章