nestJs 中的 leftJoinAndSelect 不会从 postgresql 中检索所有数据
leftJoinAndSelect in nestJs does not retrieve all data from postgresql
我有三个 table product
、branch
和 product_branches
产品 table 包含:id, name
分支 table 包含:id, name, lat, lng
product_branches table 包含:productId, branchId
我有这个问题
const query = this.createQueryBuilder('products')
.leftJoin('products.productBranches', 'productBranches')
.leftJoinAndSelect(
'branch',
'branches',
'productBranches.branchId = branches.id',
);
const products = await query.getMany();
结果是这样的
[
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "product name",
},
.....]
但结果一定是这样
[
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "product name",
"branches": [
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "branch name",
"lat": "lat",
"lng": "lng",
},
....
]
},
....]
当我记录查询 console.log('query: ${query.getQuery()}');
并将结果复制到 postgresql 时,查询工作正常并且 return 数据
这是我的实体:
@Entity()
export class Product {
@PrimaryGeneratedColumn('uuid')
id: string;
@OneToMany((_type) => ProductBranches, (productBranches) => productBranches.product, {
eager: false,
})
productBranches: ProductBranches[];
}
@Entity()
export class Branch {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@Column()
lat: string;
@Column()
lng: string;
@OneToMany((_type) => ProductBranches, (productBranches) => productBranches.branch, { eager: false, },)
productBranches: ProductBranches[];
}
@Entity()
export class ProductBranches {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne((_type) => Product, (product) => product.productBranches, {
eager: true,
})
@Exclude({ toPlainOnly: true })
product: string;
@ManyToOne((_type) => Branch, (branch) => branch.productBranches, {
eager: true,
})
@Exclude({ toPlainOnly: true })
branch: string;
}
注意:我尝试 find
关系
谢谢
问题分为两方面
@Exclude({ toPlainOnly: true })
在 branch: string;
上 ProductBranches Entity
在这种情况下使用createQueryBuilder
是不对的,应该使用
const offers = this.find({
relations: ['productBranches'],
});
但是 branch
将在 productBranches
内部,而不是在单独的 JSON 对象中
感谢我的朋友穆罕默德·阿里
我有三个 table product
、branch
和 product_branches
产品 table 包含:id, name
分支 table 包含:id, name, lat, lng
product_branches table 包含:productId, branchId
我有这个问题
const query = this.createQueryBuilder('products')
.leftJoin('products.productBranches', 'productBranches')
.leftJoinAndSelect(
'branch',
'branches',
'productBranches.branchId = branches.id',
);
const products = await query.getMany();
结果是这样的
[
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "product name",
},
.....]
但结果一定是这样
[
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "product name",
"branches": [
{
"id": "143f6e35-59ae-4185-bed2-a479ec716489",
"name": "branch name",
"lat": "lat",
"lng": "lng",
},
....
]
},
....]
当我记录查询 console.log('query: ${query.getQuery()}');
并将结果复制到 postgresql 时,查询工作正常并且 return 数据
这是我的实体:
@Entity()
export class Product {
@PrimaryGeneratedColumn('uuid')
id: string;
@OneToMany((_type) => ProductBranches, (productBranches) => productBranches.product, {
eager: false,
})
productBranches: ProductBranches[];
}
@Entity()
export class Branch {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@Column()
lat: string;
@Column()
lng: string;
@OneToMany((_type) => ProductBranches, (productBranches) => productBranches.branch, { eager: false, },)
productBranches: ProductBranches[];
}
@Entity()
export class ProductBranches {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne((_type) => Product, (product) => product.productBranches, {
eager: true,
})
@Exclude({ toPlainOnly: true })
product: string;
@ManyToOne((_type) => Branch, (branch) => branch.productBranches, {
eager: true,
})
@Exclude({ toPlainOnly: true })
branch: string;
}
注意:我尝试 find
关系
谢谢
问题分为两方面
@Exclude({ toPlainOnly: true })
在branch: string;
上ProductBranches Entity
在这种情况下使用
createQueryBuilder
是不对的,应该使用const offers = this.find({ relations: ['productBranches'], });
但是 branch
将在 productBranches
内部,而不是在单独的 JSON 对象中
感谢我的朋友穆罕默德·阿里