len*_*myr 5 orm typescript typeorm
我有两个实体,aUser和一个Post实体。一个用户可以有多个帖子。
我想根据帖子标题和作者姓名查找帖子,如下所示:
const post = await postsRepository.find({
where: {
title: postTitle,
user: {
name: userName,
},
},
relations: ['user'],
});
Run Code Online (Sandbox Code Playgroud)
Typeorm生成以下 SQL:
SELECT `Post`.`id` AS `Post_id`, `Post`.`title` AS `Post_title`, `Post`.`user_id`
AS `Post_user_id`, `Post__user`.`id` AS `Post__user_id`, `Post__user`.`name` AS
`Post__user_name` FROM `posts` `Post` LEFT JOIN `users` `Post__user` ON
`Post__user`.`id`=`Post`.`user_id` WHERE (`Post`.`user_id` = ?) -- PARAMETERS: [null]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它根本没有查询 name 属性。
但它不起作用,我在文档中找不到任何内容。
[编辑]:另一方面,以下代码按预期工作,但未使用联接来查询关系:
const user = await usersRepository.findOne({ name: userName });
const post = await postsRepository.find({
where: {
title: postTitle,
user: {
id: user.id,
},
},
relations: ['user'],
});
Run Code Online (Sandbox Code Playgroud)
[/编辑]
我唯一能做的就是这样
const post = await postsRepository.createQueryBuilder('posts')
.innerJoinAndSelect('posts.user', 'user')
.where({
title: postTitle,
})
.andWhere('user.name = :name', { name: userName })
.getOne();
Run Code Online (Sandbox Code Playgroud)
所以这可行,但是说实话,它看起来超级糟糕,并且当您需要按其他关系进行过滤时,写起来非常烦人。
文档中是否有我遗漏的内容?
| 归档时间: |
|
| 查看次数: |
12668 次 |
| 最近记录: |