I`m working on date-range-overlap functionality that can be written in 13 positive conditions to check if the date intervals overlap :
https://en.wikipedia.org/wiki/Allen%27s_interval_algebra
Or more elegantly in 2 negative conditions:
http://baodad.blogspot.nl/2014/06/date-range-overlap.html
In MYSQL :
WHERE NOT(`last_day` <= '2001-06-01' OR `first_day` >= '2022-12-01');
This would require something like this, which I can`t find in the docs:
$query = $query->whereNot(function ($query) use ($first_day, $last_day) {
$query->where('last_day', '<=', $first_day);
$query->orWhere('first_day', '<=', $last_day);
});
How can I solve this?
This is related to my other possibly duplicate post : Laravel / Eloquent WHERE NOT SUBQUERY
But I hope my question is more clear now.
You can achieve what you need by reverting the constraints on last_day and first_day - this way there is no need to use NOT clause.
Instead of doing
you can do
And with Eloquent builder the following should do the trick: