我正在使用laravel制作应用程序以跟踪我的训练。数据库中的字段是:id,created_at,updated_at,exercise,repetitions和weight。
我想制定所有训练的时间表。时间轴应该是我锻炼的所有日期的列表。
我的问题是:我如何获得锻炼的每个日期的第一个条目?
答案 0 :(得分:2)
假设你正在使用像mysql这样的东西,并且有一个像'workouts'这样的表,你提供的列,这应该可以解决问题。
DB::table('workouts')
->orderBy('created_at', 'asc')
->groupBy(DB::raw('DATE(created_at)'))
->get();
这实际上从表格锻炼中选择*,然后按created_at列按升序对其进行排序,然后对created_at列进行分组,因此每个日期只检索1个条目。创建created_at字段作为mysql日期对象需要'DB :: raw('DATE('created_at'))'(默认情况下,laravel使用日期时间作为其时间戳)。
答案 1 :(得分:0)
你应该对Laravel采用不同的方法。如果您有一个Workout
对象,并且每个对象都与Exercises
相关联,那么您想要做的事情变得非常简单:
型号:
表:
workout
id | created_at | updated_at
exercises
id | workout_id | exercise | repetitions | weight | created_at | updated_at
:
public function exercises() {
return $this->hasMany(App\Excercise::class);
}
然后在你的控制器中你可以这样做:
<?php
$workouts = App\Workout::all();
foreach ($workouts as $key => $workout) {
$exercises = $workout->exercises;
// do stuff
}
要获得时间表,您可以执行以下操作:
$workouts = App\Workout::groupBy(DB::raw('Date(created_at)'))->get();
将按照完成的日期对您的所有锻炼进行分组。