我有一个实体“ CalednarEvent”,用于存储我所有用户的事件。 我可以在应用程序中创建事件,每次创建新事件时,都必须检查是否没有其他事件重叠。
CalendarEvent.php
class CalendarEvent
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, unique=false)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="reference", type="string", length=255, unique=false)
*/
private $reference;
/**
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var \DateTime
* @ORM\Column(type="datetime", name="event_start")
*/
private $startDate;
/**
* @var \DateTime
* @ORM\Column(type="datetime", name="event_end")
*/
private $endDate;
/**
* @var bool
* @ORM\Column(name="isLoan", type="boolean")
*/
private $isLoan = TRUE;
}
我不得不用loan = true
检查同一用户和他的事件。
这是我的存储库功能:
public function findLoanOverlapByUser(User $user, \DateTime $start, \DateTime $end){
$qb = $this->_em->createQueryBuilder();
$qb ->select('e')
->from($this->_entityName, 'e')
->where('e.isLoan = :true')
->andWhere('e.user = :id_user')
->andWhere('e.startDate > :endDate AND e.endDate > :startDate')
->setParameter('true', true)
->setParameter('startDate', $start)
->setParameter('endDate', $end)
->setParameter('id_user', $user->getId())
;
return $qb->getQuery()->getResult();
}
在我的控制器中,我检查了一下,但工作不正常。我想念什么?
$otherEvents = $entityManager->getRepository(CalendarEvent::class)->findLoanOverlapByUser($calendarEvent->getUser(), $calendarEvent->getStartDate(), $calendarEvent->getEndDate());
if($otherEvents != null){
$request->getSession()->getFlashBag()->add('error', "Il existe un autre évènement dans la période sélectionnée.");
}else{
//persist
$calendarEvent->setTitle($calendarEvent->createTitle());
$entityManager->persist($calendarEvent);
$entityManager->flush();
$request->getSession()->getFlashBag()->add('success', "Prêt de personnel crée");
}