2017-02-17 2 views
0

Ich habe diese Sammlung aus einer Datenbank, wo ich eine Spalte namens "event_date" habe.laravel carbon get Tag Namen aus einer Datumsspalte aus einer Sammlung

Was ich will, ist nur die Tagnamen aus dieser Spalte, die in einer Sammlung kommt.

Ich weiß, dass Sie Carbon verwenden können, um die Namen Tage durch zum Beispiel eine Methode namens ->format() zu bekommen, aber ich bekomme einen Fehler, der besagt, dass diese Methode nicht existiert.

Mein Code so weit ist wie folgt:

$collection = MyModel::all(); 

Im Inneren der "event_date" Eigenschaft oder Spalte ist. Von diesem möchte ich die Namen der Tage erhalten, um sie in ein Array oder eine Ansammlung zu setzen und schließlich jene Tagesfrequenzen zu zählen.

ich versuchte, so folgt der ->pluck() Methode:

Um dies zu erreichen, habe ich folgendes versucht

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

Und die dd($filtered) sieht aus wie wie folgt:

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 versucht, die Tagnamen wie folgt zu erhalten:

Aber ich habe folgende Fehlermeldung:

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

Irgendwelche Ideen nur dayNames in einem Array oder einer Sammlung zu bekommen? Gibt es einen anderen Weg, dies zu tun?

Antwort

3

Du nennst Format() über die Sammlung von Daten, während Sie es auf den Carbon- Objekte nennen sollte. Sie müssen eine weitere Schleife, die sie durch alle Termine in myDates Sammlung und zu formatieren, z.B .:

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

Nice! Aber warum bekomme ich die $ Daynames leer? Wenn ich jedes '$ date-> format ('l') ausspreche, kann ich die Tagnamen sehen. Aber das Array erscheint leer. Ich habe 'uses ($ Daynames)' und 'return $ Daynames;' versucht, und es funktioniert auch nicht. – Pathros

0

schöne und elegante Art und Weise erreichen dies mit Sammelleitungen gehen würde:

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