Как сгруппировать по месяцам для отображения дат в лезвии Laravel?

Я в основном пытаюсь добиться следующего макета в лезвии Laravel:

октября

семнадцатый
двадцать пятый

ноябрь

первый
13-й

Декабрь

шестнадцатый

Как мне получить это, имея массив дат, например:

array (size=5)
'id' => int 1
'tour_id' => int 1
'start_date' => string '2014-10-17 00:00:00' (length=19)
'end_date' => string '2014-10-24 00:00:00' (length=19)
'price' => int 12503

array (size=5)
'id' => int 2
'tour_id' => int 1
'start_date' => string '2014-10-25 00:00:00' (length=19)
'end_date' => string '2014-10-31 00:00:00' (length=19)
'price' => int 12503

array (size=5)
'id' => int 3
'tour_id' => int 2
'start_date' => string '2014-11-01 00:00:00' (length=19)
'end_date' => string '2014-11-11 00:00:00' (length=19)
'price' => int 12503

array (size=5)
'id' => int 4
'tour_id' => int 3
'start_date' => string '2014-11-13 00:00:00' (length=19)
'end_date' => string '2014-11-31 00:00:00' (length=19)
'price' => int 12503

array (size=5)
'id' => int 5
'tour_id' => int 3
'start_date' => string '2014-12-16 00:00:00' (length=19)
'end_date' => string '2014-12-31 00:00:00' (length=19)
'price' => int 12503

Я возвращаю этот массив в представление из моего контроллера со следующей строкой:

'tourDates' => $this->tourDate->all(['tour'], ['column' => 'start_date', 'order' => 'asc'])

2

Решение

Вы можете использовать что-то вроде этого:

$data = [
[
'id'         => 1,
'start_date' => '2014-10-17 00:00:00',
],
[
'id'         => 2,
'start_date' => '2014-10-25 00:00:00',
],
[
'id'         => 3,
'start_date' => '2014-11-01 00:00:00',
],
[
'id'         => 4,
'start_date' => '2014-11-13 00:00:00',
],
[
'id'         => 5,
'start_date' => '2014-12-16 00:00:00',
]
];$month = '';

use Carbon\Carbon;

foreach ($data as $item) {
$date = new Carbon($item['start_date']);
if ($date->format("F") != $month) {
$month = $date->format("F");
echo '<h1>'.$month.'</h1>';
}
echo $item['id']."<br />";
}

Конечно, это PHP-код, вы можете сначала сохранить эти данные, а затем назначить их Blade или шаблону в другом формате.

Вы можете сделать это так для Blade:

$data = [
[
'id'         => 1,
'start_date' => '2014-10-17 00:00:00',
],
[
'id'         => 2,
'start_date' => '2014-10-25 00:00:00',
],
[
'id'         => 3,
'start_date' => '2014-11-01 00:00:00',
],
[
'id'         => 4,
'start_date' => '2014-11-13 00:00:00',
],
[
'id'         => 5,
'start_date' => '2014-12-16 00:00:00',
]
];$months = '';foreach ($data as $item) {
$date = new Carbon($item['start_date']);
$months[$date->format("F")][] = $item;
}
return View::make('dates')->with('months',$months);

И в клинке:

@foreach ($months as $month => $items)
<h1>{{{ $month }}}</h1>

@foreach ($items as $item)
{{{ $item['id'] }}}<br />
@endforeach
@endforeach
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector