Seems like it was my own logic that was flawed. My query did not take from and to periods that are inside reservedFrom and reservedTo into account.
Added a or clause to the find method.
public function findReservationsInDates($q, $options) {
/** @var Query $q */
if(!isset($options['from']))$options['from'] = Time::now();
if(!isset($options['to']))$options['to'] = Time::now();
return $q->where(function($exp) use ($options) {
/** @var QueryExpression $exp */
$orCond = $exp->or_(function($or) use ($options) {
/** @var QueryExpression $or */
$or = $or
->between('reservedFrom', $options['from'], $options['to'], 'datetime')
->between('reservedTo', $options['from'], $options['to'], 'datetime');
return $or->add($or->and_(function($and) use ($options) {
/** @var QueryExpression $and */
return $and
->lte('reservedFrom', $options['from'])
->gte('reservedTo', $options['to']);
}));
});
return $exp->add($orCond);
});
}
Sorry for anyone starting to help me with this issue.