Php 条令查询生成器-在多对多实体上运行查询

Php 条令查询生成器-在多对多实体上运行查询,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我正在使用查询生成器对应用程序中的多对多实体执行查询。问题是条令查询生成器并没有使用“多对多”表来存储两个实体之间的数据 当我使用实体中的映射变量连接它们时,条令查询生成器会连接“父”表,从而导致错误的结果 我不知道它为什么会这样做,以及如何修复我的代码以正确工作 有人知道问题出在哪里吗 这是我想要运行的查询(我想要使用条令查询生成器运行的工作查询): 条令查询: $query = $repository->createQueryBuilder('bv') ->sel

我正在使用查询生成器对应用程序中的多对多实体执行查询。问题是条令查询生成器并没有使用“多对多”表来存储两个实体之间的数据

当我使用实体中的映射变量连接它们时,条令查询生成器会连接“父”表,从而导致错误的结果

我不知道它为什么会这样做,以及如何修复我的代码以正确工作

有人知道问题出在哪里吗

这是我想要运行的查询(我想要使用条令查询生成器运行的工作查询):

条令查询:

$query = $repository->createQueryBuilder('bv')
        ->select('COUNT(1) as total, bt.type as busType, MIN(bv.passengerSeatsNumber) as minPersons, MAX(bv.passengerSeatsNumber) as maxPersons')
        ->join('bv.company', 'c')
        ->join('c.stations', 's')
        ->join('AppBundle:GroupSizeBusVehicle', 'gz', 'WITH', 'bv.passengerSeatsNumber >= gz.min AND bv.passengerSeatsNumber <= gz.max')
        ->join('gz.fleetType', 'bt')
        ->where('s.id = :stationId')
        ->setParameter('stationId', $stationId)
        ->groupBy('bv.busType')
        ->getQuery();
 dump ($query->getResult());
公司:

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Stations", inversedBy="company")
 */
private $stations;

/**
 * @ORM\OneToMany(targetEntity="BusVehicle", mappedBy="company")
 */

private $busVehicle;
电台:

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Company", mappedBy="stations")
 */
private $company;
从我的代码生成的条令查询:

SELECT 
  COUNT(1) AS sclr_0, 
  b0_.type AS type_1, 
  MIN(b1_.passenger_seats_number) AS sclr_2, 
  MAX(b1_.passenger_seats_number) AS sclr_3 
FROM 
  bus_vehicle b1_ 
  INNER JOIN company c2_ ON b1_.company_id = c2_.id 
  INNER JOIN company_stations c4_ ON c2_.id = c4_.company_id 
  INNER JOIN stations s3_ ON s3_.id = c4_.stations_id 
  INNER JOIN bus_vehicle_group_size b5_ ON (
    b1_.passenger_seats_number >= b5_.min 
    AND b1_.passenger_seats_number <= b5_.max
  ) 
  INNER JOIN bus_types b0_ ON b5_.fleet_id = b0_.id 
WHERE 
  s3_.id = ? 
GROUP BY 
  b1_.bus_type
使用条令运行时得到的查询结果:

 0 => array:4 [▼
    "total" => "7"
    "busType" => "2"
    "minPersons" => "15"
    "maxPersons" => "55"
  ]
  1 => array:4 [▼
    "total" => "3"
    "busType" => "3"
    "minPersons" => "10"
    "maxPersons" => "15"

“当我在实体中使用映射变量联接它们时,条令查询生成器联接“父”表,从而导致错误的结果”,这是什么意思?请将结果添加到问题中。@Lordrodos我用生成的条令查询编辑了我的帖子。问题是,条令连接父表会导致不正确的结果和不必要的连接。问题是,您在不同的字段上使用and而不是BEVERY和group by。您所说的“当我使用实体中的映射变量连接它们时,条令查询生成器连接导致不正确结果的“父”表”是什么意思?请将结果添加到问题中。@Lordrodos我用生成的条令查询编辑了我的帖子。问题是条令连接父表,这会导致不正确的结果和不必要的连接。问题是您在不同的字段上使用and而不是BEVERY和group by。
SELECT 
  COUNT(1) AS sclr_0, 
  b0_.type AS type_1, 
  MIN(b1_.passenger_seats_number) AS sclr_2, 
  MAX(b1_.passenger_seats_number) AS sclr_3 
FROM 
  bus_vehicle b1_ 
  INNER JOIN company c2_ ON b1_.company_id = c2_.id 
  INNER JOIN company_stations c4_ ON c2_.id = c4_.company_id 
  INNER JOIN stations s3_ ON s3_.id = c4_.stations_id 
  INNER JOIN bus_vehicle_group_size b5_ ON (
    b1_.passenger_seats_number >= b5_.min 
    AND b1_.passenger_seats_number <= b5_.max
  ) 
  INNER JOIN bus_types b0_ ON b5_.fleet_id = b0_.id 
WHERE 
  s3_.id = ? 
GROUP BY 
  b1_.bus_type
+-------+------+-----+-----+
| total | type | min | max |
+-------+------+-----+-----+
|     1 |    1 |  20 |  20 |
|     5 |    2 |  40 |  55 |
|     4 |    3 |  10 |  15 |
+-------+------+-----+-----+
 0 => array:4 [▼
    "total" => "7"
    "busType" => "2"
    "minPersons" => "15"
    "maxPersons" => "55"
  ]
  1 => array:4 [▼
    "total" => "3"
    "busType" => "3"
    "minPersons" => "10"
    "maxPersons" => "15"