【发布时间】:2016-02-27 12:51:36
【问题描述】:
我正在为我的大学课程制作一个汽车预订应用程序。我已将预订存储在 db 中,我想查询在给定时间段内可用的汽车。
所以,我创建了如下所示的自定义存储库类:
use Doctrine\ORM\EntityRepository;
class CarRepository extends EntityRepository
{
public function findAllAvailable($pickupDate, $returnDate)
{
$subQueryBuilder = $this->getEntityManager()->createQueryBuilder();
$carsInOverlapingPeriod = $subQueryBuilder
->select('rv')
->from('AppBundle:Reservation', 'rv')
->where(':pickup_date < rv.returnDateTime AND :return_date > rv.pickupDateTime')
->setParameters(array(
'pickup_date' => $pickupDate,
'return_date' => $returnDate
))
->getQuery()
->getArrayResult()
;
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$query = $queryBuilder
->select(['car'])
->from('AppBundle:Car', 'car')
->where($queryBuilder->expr()->notIn('car.id', ':subQuery'))
->setParameter('subQuery', $carsInOverlapingPeriod)
->getQuery()
;
return $query->getResult();
}
}
$carsInOverlapingPeriod 返回给定时间段内发生的预订数组,$query 应该只返回可用的汽车。
在预订表中,我有名为 car_id 的字段/列(在预订实体中,它是 $carId)。
无法弄清楚如何在 $query 中构建“where”条件。
我猜它应该是这样的:
WHERE car.id NOT IN subquery WITH car.id = rv.car_id
【问题讨论】:
标签: php symfony doctrine-orm doctrine dql