whereMonth('x', 1)
- это ярлык, который генерирует SQL WHERE MONTH(x)=1
. SQL-запросы, как правило, не сопоставляются с коллекцией, хотя предпринимаются усилия, чтобы максимально приблизить методы коллекции к методам построителя запросов. Обходной путь:
$student = student::with('branch', 'program')->whereYear('date_of_signup', '2019')->get();
$student = $student->where('program.name', '!=', 'Language Only');
$makati = [];
$cebu = [];
$davao = [];
for($x = 1; $x <= 12; $x++){
$makati[$x-1] = $student->filter(function ($value) use ($x) {
return $value->date_of_signup->month == $x;
});
info($makati);
}
Предполагается, что date_of_signup
правильно приведен к дате при получении с использованием свойства $dates
в модели.
Это сделано в вашей student
модели:
class student extends Model {
protected $casts = [ 'date_of_signup' => 'date' ];
// rest of model
}
Как sidenote, это, вероятно, более эффективно, если вы делаете:
$student = student::with('branch', 'program')
->whereYear('date_of_signup', '2019')
->whereHas('program' => function ($query) {
$query->where('name', '!=', 'Language Only');
})
->get();
, который отфильтрует результаты, используя SQL-запрос вместо получения всего, а затем отфильтрует коллекцию