code: public static function findUpcomingByPids($arrIds, $intLimit=0, array $arrOptions=array())
  	{
  		if (empty($arrIds) || !\is_array($arrIds))
  		{
  			return null;
  		}
  
  		$t = static::$strTable;
  		$time = Date::floorToMinute();
  
  		// Get upcoming events using endTime instead of startTime (see #3917)
  		$arrColumns = array("($t.endTime>=$time OR ($t.recurring='1' AND ($t.recurrences=0 OR $t.repeatEnd>=$time))) AND $t.pid IN(" . implode(',', array_map('\intval', $arrIds)) . ") AND ($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'" . ($time + 60) . "') AND $t.published='1'");
  
  		if ($intLimit > 0)
  		{
  			$arrOptions['limit'] = $intLimit;
  		}
  
  		if (!isset($arrOptions['order']))
  		{
  			$arrOptions['order'] = "$t.startTime";
  		}
  
  		return static::findBy($arrColumns, null, $arrOptions);
  	}
docs: Find upcoming events by their parent IDs
  
  @param array   $arrIds     An array of calendar IDs
  @param integer $intLimit   An optional limit
  @param array   $arrOptions An optional options array
  
  @return Collection|CalendarEventsModel[]|CalendarEventsModel|null A collection of models or null if there are no events