nestJs 中的 leftJoinAndSelect 不会从 postgresql 中检索所有数据

leftJoinAndSelect in nestJs does not retrieve all data from postgresql

我有三个 table productbranchproduct_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 关系

谢谢

问题分为两方面

  1. @Exclude({ toPlainOnly: true })branch: string;ProductBranches Entity

  2. 在这种情况下使用createQueryBuilder是不对的,应该使用

    const offers = this.find({
       relations: ['productBranches'],
    });
    

但是 branch 将在 productBranches 内部,而不是在单独的 JSON 对象中

感谢我的朋友穆罕默德·阿里