渴望通过子查询联接加载关系

时间:2019-05-28 13:49:38

标签: php mysql laravel laravel-5.8

我必须加入一个与另一个表有关系的表,并将结果以可读数据的形式返回到我的视图,并为每个用户显示正确的数据。这是我在控制器中的代码。

这有效,但是关系中的数据丢失了,我在做什么错了?

    $GetUsers = User::groupBy('id');

    $all = OngoingTasks::with(['tasksdata', 'taskstatus'])->joinSub($GetUsers, 'users', function ($join) {
        $join->on('ongoing_tasks.user_id', '=', 'users.id');
    })->get();

OngoingTasks与taskstatus具有一对多关系,与taskdata具有一对一关系。

用户使用OngoingTasks具有一对多功能。

1 个答案:

答案 0 :(得分:1)

如果OngoingTask属于一个用户,则在OngoingTask模型中添加以下内容:

public function user()
{
    return $this->belongsTo(User::class);
}

您可以将查询更改为此:

OngoingTasks::with(['tasksdata', 'taskstatus', 'user'])->get();

即使以上方法也可以执行基于用户ID的OngoingTasks的操作,但是如果您要过滤几个用户,请执行以下操作:

$userIds = User::pluck('id');

$all = OngoingTasks::with(['tasksdata', 'taskstatus', 'user'])->whereIn('user_id', $userIds)->get();