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"