मैं इस समाधान से विशेष रूप से संतुष्ट नहीं हूं, लेकिन यह वही करता है जो इसे करना चाहिए:मैं मूल रूप से इनपुट तिथि अंतराल के माध्यम से लूप करता हूं और एक गतिशील क्वेरी स्ट्रिंग बनाता हूं। मेरा आवेदन हमेशा अनुरोधित तिथि / समय को सीमित करता है @maximum 1 महीने का अंतराल, इसलिए क्वेरी स्ट्रिंग कभी भी अधिकतम स्ट्रिंग सीमा से अधिक नहीं होनी चाहिए।
मैं प्रदर्शन के बारे में 100% नहीं हूं, हम देखेंगे कि यह कैसे काम करता है।
//Calculate the recurrent dates
$query = $query->join('events_dates_recurrent', 'events.id', '=', 'events_dates_recurrent.event_id')
->where(function($join) use ($input_date_start, $input_date_end) {
//Create a dynamic query to get all recurrent dates within the input time interval
$query_string = "ABS(DATEDIFF('" . $input_date_start . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0";
$temp_date_start = $input_date_start;
while(strtotime($temp_date_start) <= strtotime($input_date_end)){
$temp_date_start = date('Y-m-d',strtotime($temp_date_start . " +1 day"));
//Create a raw query string
$query_string = $query_string . " OR ABS(DATEDIFF('" . $temp_date_start . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0";
}
$join->whereRaw($query_string);
});