2016-01-14 4 views
2

Edit: Благодаря комментарий г-Дэвидсона я изменил мой запрос к этому:Laravel 5 Carbon Формат

$query->where(DB::raw('MONTH(date)'), '=', Carbon::parse($month)->format('m')); 

OP:

В мои расходы Обзор У меня есть выпадающий список, где можно выбрать месяц, который запрашивает только результаты для конкретного месяца, например, так:

$query->where('date', 'LIKE', '%' . Carbon::parse($month)->format('m') . '%'); 

Раньше мой запрос был следующим образом:

$query->where('date', 'LIKE', '%2015-' . Carbon::parse($month)->format('m') . '%'); 

В моей базе данных У меня есть поле datetime, так что это работает, но, конечно, результаты показывают только результаты с 2015 года. Я пытаюсь выяснить, как использовать первый запрос, чтобы показать результаты с 2016 года.

+0

Почему бы не добавить выпадающий список, чтобы выбрать год, а также по умолчанию для текущего года? Также вы фактически сохраняете дату в виде строки? Есть более эффективные способы выполнения запроса на дату, чем использование запроса LIKE, если вы храните их в правильном формате. –

+0

Спасибо, я должен изучить это, я использую LIKE, потому что я все еще n00b;) Хранение как datetime btw. – Hardist

ответ

2

Вместо использования whereRaw или LIKE, вы можете использовать метод whereMonth:

$query->whereMonth('date', '=', Carbon::parse($month)->format('m')); 

Потому что это гораздо легче читать. Метод не документирован в Laravel Query Builder Docs, но вы можете проверить Query Builder API, чтобы увидеть подпись метода, а также проверить, какие другие методы доступны для использования при построении запросов (поскольку существует немало, которые не описаны в официальной документации).

+0

Просто FYI приведенный SQL от использования этого будет что-то вроде 'select * from" test ", где strftime ('% m'," date ") =?" 'Вы можете связать его с' whereYear', чтобы получить что-то вроде ' выберите * из «теста», где strftime ('% m', "date") =? и strftime ('% Y', "date") =? "', который должен соответствовать вашим потребностям. –

+0

@MarkDavidson Фактически 'whereMonth' использует функцию MySQL [' MONTH'] (https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month). Таким образом, это будет означать 'где MONTH (date) =?'. – Bogdan

Смежные вопросы