#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я хочу передать массив, который содержит всех учеников, упорядоченных по специализации, начиная с года и имени.
$apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get();
Это работает отлично, но теперь я хочу вернуть только наборы данных из Apprentices, которые начались 4 года назад или меньше.
Я пробовал это:
$apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get()->where('startYear' <= date("Y") - 4);
но это ничего не возвращает.
Это просто незначительная синтаксическая ошибка или моя идея изначально неверна? Заранее спасибо
Комментарии:
1. Вы пробовали ставить
->get()
в конце?2. @GluePear Я добавил дополнительный
->get()
в конец, но это выдало ошибкуToo few arguments to function IlluminateSupportCollection::get()
3. Я имел в виду перемещение
get
с того места, где оно находится сейчас, в конец, а не добавление дополнительного.4. А, ладно, я виноват. Я попробовал это, и это выдало ошибку
SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'where clause' (SQL: select * from
apprentices` где1
нулевой порядок поspecialization
asc,startYear
asc,name
asc)` Чего я не понимаю, так это того, что в предложении where он получает только 1, даже если я провел сравнение.5. Пожалуйста, смотрите мой ответ ниже
Ответ №1:
Ваше where
предложение неправильно сформировано, и вам нужно переместить get
в конец:
$apprentices = Apprentice::orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->where('startYear', '<=', date("Y") - 4)->get();
Предложения where см. в руководстве.
Комментарии:
1. технически это было бы
>=
но большое вам спасибо за вашу помощь
Ответ №2:
Вы пробовали:
$apprentices = Apprentice::whereYear('startYear', '<=', CarbonCarbon::now()->subYears(4))->orderBy('specialization', 'asc')->orderBy('startYear', 'asc')->orderBy('name', 'asc')->get();
Комментарии:
1. Это ничего не меняет