Это мои записи в БД.
tests table id date 1 2016-07-01 2 2016-07-31 3 2016-08-01 4 2016-08-15 5 2016-08-31 6 2016-09-01
Я хочу выбрать запись по месяцам. Теперь мой код – это.
контроллер
$months = \App\Test::where('date', '<=', 'now()') ->orderBy('date', 'desc') ->pluck('date', 'date');
Посмотреть
{{ Form::select('month', $months, old('month'), ['id' => 'month']) }} ( that generate this. ) <select id="month" name="month"> <option value="2016-07-01">2016-07-01</option> <option value="2016-07-31">2016-07-31</option> <option value="2016-08-01">2016-08-01</option> <option value="2016-08-15">2016-08-15</option> </select>
Но я хочу этого.
$months = \App\Test::where('date', '<=', 'now()') ->orderBy('date', 'desc') // ->format('m'). ->pluck('date', 'date'); {{ Form::select('month', $months, old('month'), ['id' => 'month']) }} ( I wanna generate this ) <select id="month" name="month"> <option value="7">7</option> <option value="8">8</option> </select>
Я хочу использовать формат с отрывом, но не могу сделать это, к сожалению, все решает?
Вы можете сделать это тремя способами. Все эти решения зависят от того, что атрибут date не является экземпляром Carbon, который является вашим случаем.
В вашей тестовой модели
public function getDateAttribute($value) { return Carbon::createFromFormat('Ymd H', $value)->format('m'); }
Однако это повредит код.
public function getFormattedDateAttribute() { return Carbon::createFromFormat('Ymd H', $this->date)->format('m'); }
$months = \App\Test::where('date', '<=', 'now()') ->orderBy('date', 'desc') ->pluck('date'); $months->each(function($month){ return Carbon::createFromFormat('Ymd H', $month)->format('m'); });
в$months = \App\Test::where('date', '<=', 'now()') ->orderBy('date', 'desc') ->pluck('date'); $months->each(function($month){ return Carbon::createFromFormat('Ymd H', $month)->format('m'); });
$months = \App\Test::select(DB::raw('to_char(date, \'MM\')')) ->where('date', '<=', 'now()') ->orderBy('date', 'desc') ->pluck('date', 'date');
Это даст вам список месяцев.
Больше информации
Спасибо всем, я сдался месяц с БД вчера, но сегодня! Я получил ИСТИННЫЙ ответ с этим кодом XD. ПРИМЕЧАНИЕ. Этот код будет работать только с Postgresql, а где … now () тоже. это postgres код. Mysql или sqlite должны изменить DB raw и где код ya.
$months = \App\Test::select(\DB::raw('DATE_PART(\'MONTH\', date) AS MONTH')) ->where('date', '<=', 'now()') ->orderBy('date', 'desc') ->pluck('month', 'month');