Laravel 5.1有很多关系

时间:2016-01-20 09:06:12

标签: php laravel laravel-5

我有以下表格设置:

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');
}

有谁知道如何返回属于分配给特定主管的用户的时间表?

1 个答案:

答案 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();