我有以下表格设置:
User
- id
Timesheet
- id
- user_id
用户也有角色。用户可以拥有employee
角色或supervisor
角色。可以将用户分配给主管,因此我在User
模型上设置了以下关系:
/**
* The supervisors that are assigned to the user.
*
* @return Object
*/
public function supervisors()
{
return $this->belongsToMany('App\Models\User\User', 'supervisor_user', 'user_id', 'supervisor_id')->withTimestamps();
}
supervisor_user
表是一个数据透视表,其数据如下:
user_id supervisor_id
1 5
以上意味着id为1
的用户被分配给ID为5
的主管。
我现在希望能够获得属于Timesheet
的{{1}}的{{1}}列表。
我尝试建立这样的关系:
User
但是,这导致以下SQL查询不加入我的Supervisor
表,只返回属于分配给该主管的用户的时间表:
/**
* Timesheets that belong to assigned users.
*
* @return Object
*/
public function supervisorTimesheets()
{
return $this->hasManyThrough('App\Models\Timesheet\Timesheet', 'Costain\Models\User\User', 'id', 'user_id');
}
有谁知道如何返回属于分配给特定主管的用户的时间表?
答案 0 :(得分:1)
HasManyThrough
只能与HasOne
/ HasMany
关系一起使用。它不能与多对多(BelongsToMany
)关系一起使用。
我认为你真正想要的是一个whereHas()
查询:
$supervisor = User::find(5);
$timesheets = Timesheet::whereHas('user.supervisors', function ($query) use ($supervisor) {
$query->where('id', $supervisor->id);
})->get();