如何通过Eloquent(Laravel)从数据透视表中获取3个项目?

时间:2018-07-08 13:08:12

标签: php laravel eloquent foreign-keys

一些业务逻辑:1个公司可能有许多具有不同角色的用户。 1个用户在公司中可能只有1个角色。

在数据库中,我有一个数据透视表company_user_roles。有3个字段:company_id, user_id, role_id。然后,我有一个User模型和belongsToMany关系来获取用户的公司:

public function companies()
    {
        return $this->belongsToMany(
         'App\Company', 
         'company_user_roles', 
         'user_id', 
         'company_id'
        );
    }

$user->companies返回公司集合。但是在每个公司中没有用户的角色。对于每个公司,我只有这个(而且这似乎是预期的):

#attributes: array:4 [▼
        "id" => 1
        "name" => "Company name"
        "created_at" => "2018-07-08 15:45:40"
        "updated_at" => "2018-07-08 15:45:42"
]

但是我不知道如何在每个公司中扮演用户的角色。我想得到这样的东西:

#attributes: array:4 [▼
            "id" => 1
            "name" => "Company name"
            "role" => [
              "id": 1,
              "name": "owner"
            ]
            "created_at" => "2018-07-08 15:45:40"
            "updated_at" => "2018-07-08 15:45:42"
    ]

类似这样,但是没有对数据库的额外查询。在这种情况下如何实现这种逻辑?

1 个答案:

答案 0 :(得分:0)

有一种解决方案可以在您的str = Dir['d:/Movies/**/*.mp4'].sort_by{ |f| File.ctime(f) }.last(30) movie_list = nil str.each do |movie_list| movie_list = File.basename(movie_list) end puts movie_list 模型belongsTo中添加pivot关系 但是您不能使用急切的加载方式从枢纽中加载该CompanyUserRole关系。 第二种解决方案是在数据透视表中有两个以上外键时使用belongsTo关系。

用户模型

hasMany

公司型号

public function roleUserCompanies(){
    return $this->hasMany('App\CompanyUserRole'); 
}

CompanyUserRole模型

public function roleCompanyUsers(){
    return $this->hasMany('App\CompanyUserRole'); 
}

获取数据

class CompanyUserRole extends Model {
    protected $table = 'company_user_roles';

    public function company(){
       return $this->belongsTo('App\Company');
    }

    public function user(){
       return $this->belongsTo('App\User');
    }


    public function role(){
       return $this->belongsTo('App\Role');
    }
}

希望这可能对您有帮助