Doctrine2 INTERVAL v querybuilderu
- lukyrys
- Člen | 36
Zdravim, resil nekdo jak pouzit korektne v Doctrine2 INTERVAL? Existuje
extension?
Mam v queryBuilderu nasledujici
$result = $this->em
->getRepository(Parkings::class)
->createQueryBuilder('p')
->select('space.id')
->join(ParkingSpaces::class, 'space', 'WITH', 'p.id = space.parkings')
->leftJoin(Reservations::class, 'reservation', 'WITH', 'space.id = reservation.parkingSpaces')
->groupBy('space.id')
->where('p.id = :parkingId')
->andWhere(':from BETWEEN DATE_ADD(reservation.start, INTERVAL -15 minute) AND DATE_ADD(reservation.end, INTERVAL +15 minute)')
->orWhere(':to BETWEEN DATE_ADD(reservation.start, INTERVAL -15 minute) AND DATE_ADD(reservation.end, INTERVAL +15 minute)')
->setParameter('parkingId', 15)
->setParameter('from', '2017-04-20 02:21:02')
->setParameter('to', '2017-04-20 03:30:00')
->getQuery()
->getResult();
bohuzel na me rve [Syntax Error] line 0, col 299: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got ‚-‘
Editoval lukyrys (20. 4. 2017 1:26)
- Svaťa Šimara
- Člen | 98
Trochu jsem pohledal v dokumentaci, a DATE_ADD příjmá v Doctrine 3 parametry http://docs.doctrine-project.org/…anguage.html#… DATE_ADD(date, days, unit)
Dokumentace sice tvrdí, že unit může být pouze DAY nebo MONTH, ale implementace říká, že už mají i sekundy a minuty https://github.com/…Platform.php#L80
Zkus tedy
->andWhere(":from BETWEEN DATE_ADD(reservation.start, -15, 'MINUTE')...")
Anebo přímo funkci DATE_SUB
- lukyrys
- Člen | 36
Svaťa Šimara napsal(a):
Trochu jsem pohledal v dokumentaci, a DATE_ADD příjmá v Doctrine 3 parametry http://docs.doctrine-project.org/…anguage.html#… DATE_ADD(date, days, unit)
Dokumentace sice tvrdí, že unit může být pouze DAY nebo MONTH, ale implementace říká, že už mají i sekundy a minuty https://github.com/…Platform.php#L80
Zkus tedy
->andWhere(":from BETWEEN DATE_ADD(reservation.start, -15, 'MINUTE')...")
Anebo přímo funkci
DATE_SUB
Diky za nakopnuti, minuty to nebere ani tak musel sem pouzit sekundy a jeste ouvozovkovat jinak se mu nelibil – literal
->andWhere(':from BETWEEN DATE_ADD(reservation.start, \'-900\', \'SECOND\') AND DATE_ADD(reservation.end, \'+900\', \'SECOND\')')
->orWhere(':to BETWEEN DATE_ADD(reservation.start, \'-900\', \'SECOND\') AND DATE_ADD(reservation.end, \'+900\', \'SECOND\')')
- Svaťa Šimara
- Člen | 98
@lukyrys Aby ses zbavil těch uvozovek, ještě můžeš zkusit proměnné
->andWhere(':from BETWEEN DATE_ADD(reservation.start, :delta, \'SECOND\'...')
->setParameter('delta', 900)
Ale fakt nevím, jestli to pomůže