我正在开发一个系统,我需要许多用户可以拥有多个帐户,并且每个帐户可以拥有多个角色。
如何以雄辩的方式进行设置。
我目前使用的是用户模型:
public function accounts() {
return $this->belongsToMany('App\Models\Account');
}
public function roles() {
return $this->belongsToMany('App\Models\Account')->withPivot('role');
}
我有一个数据透视表user_account,其中定义了角色。
我的问题是,当我去
$user = User::with('accounts')
->with('roles')
->where('id', $user['id'])
->first();
我的输出是:
{
"id": 1,
"name": "John Doe",
"created_at": "2018-03-11 20:46:46",
"updated_at": "2018-03-11 20:46:46",
"accounts": [
{
"id": 1,
"name": "Acme Inc",
"type": "BUSINESS",
"created_at": "2018-03-11 20:46:46",
"updated_at": "2018-03-11 20:46:46",
"pivot": {
"user_id": 1,
"account_id": 1
}
},
{
"id": 1,
"name": "Acme Inc",
"type": "BUSINESS",
"created_at": "2018-03-11 20:46:46",
"updated_at": "2018-03-11 20:46:46",
"pivot": {
"user_id": 1,
"account_id": 1
}
}
],
"roles": [
{
"id": 1,
"name": "Acme Inc",
"type": "BUSINESS",
"created_at": "2018-03-11 20:46:46",
"updated_at": "2018-03-11 20:46:46",
"pivot": {
"user_id": 1,
"account_id": 1,
"role": "SYSTEMADMINISTRATOR"
}
},
{
"id": 1,
"name": "Acme Inc",
"type": "BUSINESS",
"created_at": "2018-03-11 20:46:46",
"updated_at": "2018-03-11 20:46:46",
"pivot": {
"user_id": 1,
"account_id": 1,
"role": "USER"
}
}
]
}
我想要的是角色只包含来自数据透视表的数据,包含user_id,account_id和角色名称。有什么指针吗?我还希望帐户输出只包含一个帐户。
答案 0 :(得分:0)
通过在网上广泛搜索,我实际上找到了一个解决方案。
您需要创建一个AccountUser模型并将该角色添加到account_user表。
在User类中设置这些关系:
public function roles() {
return $this->hasMany('\App\Models\AccountUser');
}
public function accounts() {
return $this->hasManyThrough('\App\Models\Account', '\App\Models\AccountUser', 'id', 'id');
}
在AccountUser类
中public function user() {
return $this->belongsTo('App\Models\User');
}
public function account() {
return $this->belongsTo('App\Models\Account');
}
在帐户类
中public function accountUser() {
return $this->hasMany('\App\Models\AccountUser');
}
现在我可以做到
$user = User::with('roles')
->with('accounts')
->where('email', $data['email'])
->first();
我得到了我预期的输出:)
希望这有助于某人...