2017-02-17 21 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" 
     } 
... 

私は次のように曜日名を取得しようとしました:

$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-> format( 'l')のそれぞれをエコーすると、私はその日の名前を見ることができます。しかし配列は空に見えます。私は 'use($ Daynames)'と 'return $ Daynames;'を試しましたが、どちらもうまくいきませんでした。 – Pathros

0

素晴らしく、エレガントな方法を:

$days = MyModel::all()->pluck('event_date')->map(function($date) { 
    return $date->format('l'); 
}); 
関連する問題