gpt4 book ai didi

mysql - 如果目标位于一个表中而事件位于另一个表中,如何显示实现不同目标的进度

转载 作者:行者123 更新时间:2023-11-29 15:42:07 25 4
gpt4 key购买 nike

我正在使用 Laravel 5.7。在我的应用程序中,用户填写一个链接到目标表的表单来定义他们的目标(按事件类型、开始日期和结束日期之间要完成的事件数量)。用户可以拥有任意数量的目标。

另一个表格用于按日期和事件类型记录每个已完成事件的详细信息(链接到事件表)。两个表都包含链接的唯一 user_ids。

对于每个独特的目标(目标 ID),我需要找到与该目标匹配的所有已完成的事件,更重要的是,找到针对每个目标完成的事件总数。

我们的目标是建立一个详细说明每个目标的表格,并在同一个表格中显示每个独特目标的进度。

请帮助,因为我已经被困在这个问题上很长时间了,而且我只是一个初学者!

我已通过唯一的 user_id 内部连接了目标和事件表,并设置了 where 子句以将已完成的事件与目标条件相匹配。

我只能获得所有目标的已完成事件总量 ($progress_against_goal)。我需要给出每个独特目标完成的总事件。

来自事件表:

    Schema::create('activities', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->date('date');
$table->string('activity');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');});

来自目标表:

    Schema::create('goals', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('target_number_of_activities');
$table->string('activity');
$table->date('goal_start');
$table->date('goal_end');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); });

来自 Controller :

public function index()
{
$query = DB::table('activities')
->join('goals', 'activities.user_id', 'goals.user_id')
->select('activities.*', 'goals.*')
->where('goals.user_id', auth()->id())
->whereRaw('activities.date >= goals.goal_start')
->whereRaw('activities.date <= goals.goal_end')
->whereRaw('activities.activity = goals.activity')
->get();

$progress_against_goal = $query->count();

$goals = Goal::where('user_id', auth()->id())->get();
}

从 Blade View :

@foreach ($goals as $goal)
<tr><td>{{$goal->target_number_of_activities}}</td>
<td>{{$goal->activity}}</td>
<td>{{$goal->goal_start)</td>
<td>{{$goal->goal_end)</td>
<td>{{ $progress_against_goal }}</td></tr>
@endforeach

我只能获得所有目标的已完成事件总量 ($progress_against_goal)。我需要给出每个独特目标完成的总事件。

最佳答案

您需要声明Goal模型和Activities模型之间的关系。

class Goal extends Model
{
public function activities()
{
$query = Activities::where('date', '>=', $this->goal_start)->where('date', '<', $this->goal_end)->where('activity', '=', $this->activity);
return $this->newHasMany($query, $this, 'user_id', 'user_id');
}

public function getProgressAttribute()
{
return $this->activities()->count();
}
}

Controller

public function index()
{
$goals = Goal::where('user_id', auth()->id())->get();
}

Blade

@foreach ($goals as $goal)
<tr><td>{{$goal->target_number_of_activities}}</td>
<td>{{$goal->activity}}</td>
<td>{{$goal->goal_start)</td>
<td>{{$goal->goal_end)</td>
<td>{{$goal->progress}}</td></tr>
@endforeach

免责声明:此关系仅适用于模型Goal的实例,它不适用于像

这样的查询构建器
Goal::with('activities')->get();
//or
Goal::withCount('activities')->get();

关于mysql - 如果目标位于一个表中而事件位于另一个表中,如何显示实现不同目标的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com