Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:仅为相关模型加载嵌套关系_Php_Laravel - Fatal编程技术网

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
假设有一些公司:

  • “富公司”
  • “酒吧公司”
  • 和用户

  • “无名氏”
  • 还有两个职位:

  • “前端开发人员”
  • “后端开发人员”
  • John Doe是这两家公司的员工,职位不同

    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来这样查询它。