【发布时间】:2021-11-12 21:35:22
【问题描述】:
我有这个查询来列出所有用户及其对应关系。
用户有很多任务
每个tasks有很多worktimes,这些worktimes可以有不同的users
即,每个任务可以由不同的用户共享,因此每个任务都有单独的工作时间。
我试过下面的代码
$users = User::select('users.id', 'users.first_name', 'users.last_name', 'users.contract_type')
->with([
'tasks' => function($query) use ($from, $to){
$query->whereBetween('date', [$from, $to])
->select('tasks.id', 'tasks.date');
},
'tasks.worktimes' => function($query) {
//$query->where('user_id', ?)
$query->withCount([
'tags as late_tag_count' => function ($subQuery) {
$subQuery->where('tags.id', 1);
},
'tags as early_tag_count' => function ($subQuery) {
$subQuery->where('tags.id', 2);
},
'tags as others_tag_count' => function ($subQuery) {
$subQuery->where('tags.id', 3);
}
]
);
}
])
->get();
这里的关系 tasks.worktimes 还获取其他用户的工作时间(这是意料之中的),但我想将其限制为仅获取父用户的工作时间。 任何人请帮我弄清楚我应该使用什么其他条件来实现这一目标?
模型
用户.php
public function tasks()
{
return $this->belongsToMany(Task::class, 'task_members')->withTimestamps();
}
Task.php
public function worktimes()
{
return $this->hasMany(Worktime::class, 'task_id');
}
Worktime.php
public function task()
{
return $this->belongsTo(Task::class);
}
public function users()
{
return $this->belongsToMany(User::class, 'task_members', 'task_id', 'user_id', 'task_id');
}
【问题讨论】:
标签: laravel eloquent laravel-relations