Php Laravel:仅为相关模型加载嵌套关系
我正在尝试实现一个功能,但我认为它不适用于关系 一个用户可能有许多公司,公司可能有许多用户。它们通过公司员工数据透视表连接 透视表如下所示:Php Laravel:仅为相关模型加载嵌套关系,php,laravel,Php,Laravel,我正在尝试实现一个功能,但我认为它不适用于关系 一个用户可能有许多公司,公司可能有许多用户。它们通过公司员工数据透视表连接 透视表如下所示: company_id, user_id, position_id 我想有一个选择,让公司的员工担任他们的职位 company_id | user_id | position_id 1 1 1 2 1 2 假设有一些公司: “富公司” “酒吧公司” 和用户 “无名氏” 还有两个职
company_id, user_id, position_id
我想有一个选择,让公司的员工担任他们的职位
company_id | user_id | position_id
1 1 1
2 1 2
假设有一些公司:
company_id | user_id | position_id
1 1 1
2 1 2
我怎么能做出这样的东西
$company = Company::first();
$company->employees()->with('position')->get();
仅返回与第一个用户关联的职位,该职位属于第一个公司,并且只有一个关系?您可以这样做:
foreach($company->employees as $employee){
$employee->position_id = $employee->pivot->position_id;
$collect[] = $employee;
}
$collect包含所有员工的详细信息和职位id,您可以在其上调用职位关系
在employee和company类中,您定义的关系如下
Employee.php :
public function company(){
return $this->belongsToMany(Company::class, 'pivot_table_name','company_id','employee_id')
->withPivot("position_id");
}
Company.php :
public function employee(){
return $this->belongsToMany(Employee::class, 'pivot_table_name','company_id','employee_id')
->withPivot("position_id");
}
我认为您只能通过使用带有功能的自定义
来实现它
未测试代码:
$company = Company::first();
$company->employees()->with([
'position' => function ($query) use ($company) {
$query->where('company_id', $company->id);
}
])->get();
查看。您想退回的确切型号?我真的不明白你想返回什么?为什么员工是通过用户ID链接的,而不是员工ID(例如)?@CodeBoyCode没有员工模型本身这样的东西。员工只是与公司关联的用户。@cloudsohcunfu我想返回属于公司的所有用户(已经通过多对多工作)并且仅与该特定公司关联的职位。在pivot_表模型中与用户和职位建立关系,并从公司
模型中与pivot_表建立一个关系,然后尝试公司::with(['pivot_表.user','pivot_表.POSITION'])->first()代码>这并不能解决问题,因为用户可能有很多位置。虽然他只能有一个职位与一家公司相关,但它将返回所有用户职位,而不仅仅是与公司相关的职位$company->with('user.positions')->get()基于我问题中的数据将在公司{user{position:{position at first company,position at second company}}中解决。这会产生N+1问题,我没有职位id来这样查询它。