2017-02-17 36 views
0

У меня есть эта коллекция из базы данных, где у меня есть столбец с именем «event_date».laravel carbon получить имена дней из столбца даты из коллекции

Я хочу только получить только имена дней из этой колонки, которая входит в коллекцию.

Я знаю, что вы можете использовать Carbon, чтобы получить дни имени через, например, метод, называемый ->format(), однако я получаю сообщение об ошибке, говоря, что этот метод не существует.

Мой код до сих пор выглядит следующим образом:

$collection = MyModel::all(); 

Внутри есть свойство «event_date» или столбец. Из этого я хочу получить имена дней, чтобы поместить их в массив или коллекцию и, наконец, подсчитать частоты этих дней.

Для того, чтобы достичь этого я попытался следующие:

Я попробовал метод ->pluck() следующим образом:

$filtered = collect([ 
      'myDates'=>$collection->pluck('event_date'), 
     ]); 

И dd($filtered) выглядит следующим образом:

Collection {#209 ▼ 
    #items: array:1 [▼ 
    "myDates" => Collection {#243 ▼ 
     #items: array:30 [▼ 
     0 => Carbon {#244 ▼ 
      +"date": "2017-02-05 00:00:00.000000" 
      +"timezone_type": 3 
      +"timezone": "America/Mexico_City" 
     } 
     1 => Carbon {#218 ▼ 
      +"date": "2017-01-15 00:00:00.000000" 
      +"timezone_type": 3 
      +"timezone": "America/Mexico_City" 
     } 
     2 => Carbon {#250 ▼ 
      +"date": "2016-09-25 00:00:00.000000" 
      +"timezone_type": 3 
      +"timezone": "America/Mexico_City" 
     } 
     3 => Carbon {#249 ▼ 
      +"date": "2016-05-22 00:00:00.000000" 
      +"timezone_type": 3 
      +"timezone": "America/Mexico_City" 
     } 
... 

I попытались получить названия дней следующим образом:

$Daynames = $filtered->each(function($item,$key){ 
      return $item->myDates->format('l'); 
     }); 

Но я получил следующее сообщение об ошибке:

Undefined property: Illuminate\Support\Collection::$myDates

Любые идеи, чтобы получить только daynames в массив или коллекцию? Есть ли другой способ сделать это?

ответ

3

Вы звоните формат() по сбору фиников, в то время как вы должны вызвать его на углерода объектов. Вам нужно еще один цикл, который будет проходить через все даты в myDates сбор и форматировать их и т.д .:

$Daynames = []; 
$filtered->each(function($item,$key) use (&$Daynames) { 
    $item->each(function($date) use (&$Daynames) { 
    $Daynames[] = $date->format('l'); 
    }); 
}); 
+0

Ницца! Но почему я получаю '$ Daynames' пустым? Если я выхожу из каждого формата '$ date-> ('l')', я могу видеть имена дней. Но массив выглядит пустым. Я попробовал 'use ($ Daynames)' и 'return $ Daynames;' и он тоже не работает. – Pathros

0

красиво и элегантный способ для достижения этой цели с помощью трубопроводов сбора:

$days = MyModel::all()->pluck('event_date')->map(function($date) { 
    return $date->format('l'); 
});