Laravel Datables搜索包括数据透视表结果

时间:2018-06-04 07:44:48

标签: php datatables eloquent laravel-5.2 pivot-table

在我解释我想要做什么之前,首先可能值得一提的是以下信息。

我有3张桌子:   - 用户   - 职位空缺   - user_vacancy

空缺可以有一个所有者,由空缺表上的外键user_id表示。

许多其他用户可以是团队成员,可以使用数据透视表user_vacancy

分配到同一空缺职位

我试图通过Vacancy模型列出数据表中一个用户的所有空缺,无论他们是业主还是空缺的团队成员,我的代码如下:

VacanciesController.php:

public function get_user_vacancies() {
    $user = User::find(auth()->id());

    $vacancies = Vacancy::with(['team_members' => function($q) use ($user) {
          $q->where('user_id', $user->id);
    }])->where('user_id', $user->id);

    $dataTables = Datatables::of($vacancies);

    $dataTables->make(true);
}

Vacancy.php:

public function team_members()
{
    return $this->belongsToMany('App\Models\Access\User\User')->withPivot('id', 'created_at', 'updated_at');
}

user.php的:

public function team_vacancies()
{
    return $this->belongsToMany('App\Vacancy')->withPivot('id', 'created_at', 'updated_at');
}

我明白,为了加入“团队成员职位空缺”与“业主职位空缺”,我显然做错了什么,但我不太清楚如何才能做到正确。

我希望有人可以帮助我或指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

您应该在模型中为team_members方法添加关联表的名称,如下所示:

public function team_vacancies()
{
    return $this->belongsToMany('App\Vacancy', 'user_vacancy')->withPivot('id', 'created_at', 'updated_at');
}

并且vacancies内的User.phpteams内的Vacancy.php重命名方法会很高兴