2017-01-04 7 views
1

laravelでアプリを作ってトレーニングを追跡しています。データベースのフィールドは、id、created_at、updated_at、exercise、繰り返し、および重みです。Laravel - 行が作成された毎日の最初のエントリを取得

すべてのトレーニングのタイムラインを作りたいと思います。タイムラインは、私がトレーニングをしたすべての日付のリストにする必要があります。

私の問題は次のとおりです。私はトレーニングを行った日ごとに最初のエントリを取得するにはどうすればよいですか?

+0

日付形式「Y-m-d」の**日付**フィールドを作成し、そのフィールドでグループ化することができます。 – Mihailo

答えて

2

あなたがmysqlのようなものを使用していて、あなたが提供した列で「トレーニング」のようなテーブルを持っているとすれば、これはトリックを行うべきです。

DB::table('workouts') 
    ->orderBy('created_at', 'asc') 
    ->groupBy(DB::raw('DATE(created_at)')) 
    ->get(); 

これは、本質的に昇順でのcreated_atカラムによって、次いで、テーブルトレーニングから*注文を選択し、次にグループので、各日から1つだけのエントリが検索されるのcreated_atカラム。 created_atフィールドをmysqlデータオブジェクトとして作成するには、DB :: raw( 'DATE(' created_at '))'が必要です(デフォルトでlaravelはタイムスタンプの日付時刻を使用します)。

0

Laravelではこれとは別のアプローチをとるべきです。あなたがWorkoutオブジェクトを持っており、それらのそれぞれは、それに関連付けられたExercisesを持っている場合は、何をやりたいと思っているのは本当に容易になる:

モデル:

  • ワークアウト
  • 行使

テーブル:あなたのWorkoで

workout 
id | created_at | updated_at 

exercises 
id | workout_id | exercise | repetitions | weight | created_at | updated_at 

UTモデル:次に、あなたのコントローラーにあなたが行うことができます

public function exercises() { 
    return $this->hasMany(App\Excercise::class); 
} 

:すべてのワークアウトがグループ化されます

$workouts = App\Workout::groupBy(DB::raw('Date(created_at)'))->get(); 

<?php 

$workouts = App\Workout::all(); 

foreach ($workouts as $key => $workout) { 
    $exercises = $workout->exercises; 
    // do stuff 
} 

をそして、あなたのタイムラインを取得するにはあなたのような何かを行うことができます彼らが終わった日までに。

関連する問題