【发布时间】:2021-10-21 17:31:45
【问题描述】:
我正在使用 Express 和 typeORM 为基于 Wordpress 数据库模式的 Mysql 构建 rest API,您可以从 here 进行检查。
当我尝试inner join 或left join 时,我每次都会收到Cannot read property 'getParameters' of undefined 错误。
我的代码:
const posts = await this.postRepository
.createQueryBuilder('posts')
.innerJoinAndSelect(WpPostMetaModel, 'postmeta', 'posts.id = postmeta.post')
.getMany()
response.send(posts);
我也尝试了以下相同的错误:
let posts = await createQueryBuilder('WpPostsModel')
.leftJoinAndSelect(WpPostMetaModel, 'postmeta', 'postmeta.post_id = WpPostsModel.ID')
.getManyAndCount()
我的实体:
发布实体:
@Entity({ name: 'wp_posts', synchronize: false })
export class WpPostsModel {
@PrimaryGeneratedColumn({ name: 'ID' })
public id?: number;
@Column({ name: 'post_date' })
public date?: Date;
@Column({ name: 'post_date_gmt' })
public date_gmt?: Date;
...etc
@ManyToMany(() => WpTermTaxonomyModel)
@JoinTable({
name: 'wp_term_relationships',
joinColumn: {
name: 'object_id',
referencedColumnName: 'ID'
},
inverseJoinColumn: {
name: 'term_taxonomy_id',
referencedColumnName: 'termTaxonomyId'
}
})
public categories?: WpTermTaxonomyModel[];
}
发布元实体:
@Entity({ name: 'wp_postmeta' })
export class WpPostMetaModel {
@PrimaryGeneratedColumn({ name: 'meta_id' })
public metaId?: number;
@OneToOne(() => WpPostsModel, {eager: true, cascade: true})
@JoinColumn({ name: 'post_id' })
public post?: WpPostsModel
@Column({ name: 'meta_key' })
public metaKey?: string;
@Column({ name: 'meta_value' })
public metaValue?: string;
}
更新:整个错误
(node:1043) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'getParameters' of undefined
at SelectQueryBuilder.join (/Volumes/Partion-2/Projects/republic-news/src/query-builder/SelectQueryBuilder.ts:1319:52)
at SelectQueryBuilder.leftJoin (/Volumes/Partion-2/Projects/republic-news/src/query-builder/SelectQueryBuilder.ts:284:14)
at SelectQueryBuilder.leftJoinAndSelect (/Volumes/Partion-2/Projects/republic-news/src/query-builder/SelectQueryBuilder.ts:364:14)
at WpPostsController.<anonymous> (/Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:54:14)
at step (/Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:33:23)
at Object.next (/Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:14:53)
at /Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:8:71
at new Promise (<anonymous>)
at __awaiter (/Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:4:12)
at WpPostsController.getAllPosts (/Volumes/Partion-2/Projects/republic-news/src/controllers/post.controller.ts:31:86)
(node:1043) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1043) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
【问题讨论】:
-
有错误的堆栈跟踪指向哪里?
-
感谢您的回复我已经用整个错误日志更新了问题
-
什么是
postmeta?在您的模型中,您有post。 -
基于 Wordpress,它是一组额外的帖子数据,因为(自定义字段)具有键和值我的帖子元数据和基于 Wordpress 数据库架构的帖子本身之间存在一对一的关系,您可以检查从这里codex.wordpress.org/images/thumb/2/25/WP4.4.2-ERD.png/…
-
我对 API 不熟悉,但您不需要编写类中数据库表中的每个字段吗?
标签: javascript mysql typescript relational-database typeorm