Skip to content
Advertisement

laravel carbon get day names from a date column from a collection

I have this collection from a database where I have a column called “event_date”.

What I want is just to get only the day names from that column that comes in a collection.

I know you can use Carbon to get the name days through, for example, a method called ->format(), however I get an error saying that this method does not exist.

My code so far is as follows:

$collection = MyModel::all();

Inside there is the “event_date” property or column. From that, I want to get the names of the days to put them into an array or collection and finally count those days frequencies.

In order to achieve this I have tried the following:

I tried the ->pluck() method as follows:

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

And the dd($filtered) looks like as follows:

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 tried to get the day names as follows:

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

But I got the following error:

Undefined property: IlluminateSupportCollection::$myDates

Any ideas to get only the daynames into an array or collection? Is there another way to do this?

Advertisement

Answer

You’re calling format() on the collection of dates, while you should call it on the Carbon objects. You need another loop that would go through all dates in myDates collection and format them, e.g.:

$Daynames = [];
$filtered->each(function($item,$key) use (&$Daynames) {
  $item->each(function($date) use (&$Daynames) {
    $Daynames[] = $date->format('l');
  });
});
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement