一些业务逻辑: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"
]
类似这样,但是没有对数据库的额外查询。在这种情况下如何实现这种逻辑?
答案 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');
}
}
希望这可能对您有帮助