从Laravel关系获取结果

时间:2018-07-12 10:56:19

标签: laravel

我正在使用laravel VERSION ='5.6.22'。我有两个表 t_project_employee employees

我在t_project_employee中存储了project_id和分配的员工。

 public function employees(){
    return $this->hasOne('App\Employee','emp_id','pe_emp_id')->select(array('emp_id', 'f_name','l_name'));
}

我在员工表中存储员工详细信息。

我正在尝试获取分配给特定项目的所有员工。

return TProjectEmployees::where("pe_prj_id",$projectId)->with("employees")->get(); 

我正在获得所有项目,而在项目内部,我正在获得员工。我只需要分配给项目的员工详细信息。我完成了上面的代码。我该怎么办

[
{
    "pe_id": 1,
    "pe_prj_id": 1,
    "pe_emp_id": 54,
    "pe_role_id": 1,
    "pe_startdate": "2018-07-11",
    "pe_enddate": "2018-07-19",
    "pe_IsActive": 1,
    "employees": {
        "emp_id": 54,
        "f_name": "Aglubat Micheal",
        "l_name": "Nicolas"
    }
},

我正在控制器中使用以上代码

{{1}}

是结果。我不需要项目详细信息,我只需要员工

2 个答案:

答案 0 :(得分:0)

正如我在上面的示例中所示,根据我的意见,您已使用hasOne关系,因为我可能将一个项目分配给多个雇员权利,所以我使用belongsTo关系?因此您的代码将如下所示:

public function employees() {

    return $this->belongsTo('App\Employee','emp_id','pe_emp_id')->select(array('emp_id', 'f_name','l_name'));
} 

答案 1 :(得分:0)

您的关系有误。 t_project_employees似乎是多对多关系的中间表或枢纽表。因此,您将没有该表的模型,也不会直接查询该表。您在项目模型和员工模型上都将有一个belongsToMany关系。

员工模型:

public function projects()
{
    return $this->belongsToMany(Project::class, 't_project_employees');
}

然后查询该关系:https://laravel.com/docs/5.6/eloquent-relationships#querying-relations

Employee::whereHas('projects', function($q) use ($projectId) {
    $q->where('id', $projectId);
});