laravelでアプリを作ってトレーニングを追跡しています。データベースのフィールドは、id、created_at、updated_at、exercise、繰り返し、および重みです。Laravel - 行が作成された毎日の最初のエントリを取得
すべてのトレーニングのタイムラインを作りたいと思います。タイムラインは、私がトレーニングをしたすべての日付のリストにする必要があります。
私の問題は次のとおりです。私はトレーニングを行った日ごとに最初のエントリを取得するにはどうすればよいですか?
laravelでアプリを作ってトレーニングを追跡しています。データベースのフィールドは、id、created_at、updated_at、exercise、繰り返し、および重みです。Laravel - 行が作成された毎日の最初のエントリを取得
すべてのトレーニングのタイムラインを作りたいと思います。タイムラインは、私がトレーニングをしたすべての日付のリストにする必要があります。
私の問題は次のとおりです。私はトレーニングを行った日ごとに最初のエントリを取得するにはどうすればよいですか?
あなたが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はタイムスタンプの日付時刻を使用します)。
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
}
をそして、あなたのタイムラインを取得するにはあなたのような何かを行うことができます彼らが終わった日までに。
日付形式「Y-m-d」の**日付**フィールドを作成し、そのフィールドでグループ化することができます。 – Mihailo