What I'm saying is that year can be integer, eg '2019'
Use it on all records that are created (add a year column to every table that is year specific)
When you have your dropdown to choose the year,
<select name='year'>
<option value='2019'>2019 - 2020</option>
<option value='2020'>2020 - 2021</option>
<option value='2021'>2021 - 2022</option>
<option value='2022'>2022 - 2023</option>
</select>
after choosing the year, you will have one value, 2019, 2020 etc
Save this value in session
Write the value to any records that are year specific
Create a scope on all your models that only get the 'active' year records
eg
public function scopeActiveYear($query)
{
return $query->where('year',session('year'));
}
then when getting invoices for example;
$invoices = Invoice::activeYear()->get();
The above is using local scope, but you could also use a global scope and then you don't need to specify which year you are working with in your queries. You would then use withoutGlobalScope() when you need to override and get records from any year
You could also use a model event to automatically add the active year to all new records