Как сказал Ли, это неправильный формат, из-за которого отформатированная дата является логическим значением ...
Что вы можете сделать, это привести атрибут start как datetime внутри модели и получить что-то вроде этого:
protected $casts = [
'start' => 'datetime',
...
];
Тогда вы сможете сделать что-то вроде этого:
public function checkShifts()
{
$shifts = Shift::where("disabled", "=", "0")->get();
foreach ($shifts as $shift)
{
if ($shift->start->diffInWeeks(now()) >= 42)
{
$shift->disabled = true;
}
}
return $shifts;
}
С методом карты коллекции:
public function getShifts()
{
return Shift::where("disabled", "0")->get()->map(function ($shift) {
$shift->disabled = (bool)$shift->start->diffInWeeks(now()) >= 42;
return $shift;
})->values();
}
Вы можете использовать метод фильтра коллекции для получить только включенные смены:
public function enabledShifts()
{
return Shift::where("disabled", "0")->get()->filter(function ($shift) {
return $shift->start->diffInWeeks(now()) >= 42;
})->values();
}