У меня есть следующие модели и сводная таблица:
Пользователь:
public function accounts() {
return $this->belongsToMany('App\Account', 'account_role_user', 'user_id', 'account_id');
}
public function roles() {
return $this->belongsToMany('App\Role', 'account_role_user', 'user_id', 'role_id');
}
Аккаунт
public function users() {
return $this->belongsToMany('App\User', 'account_role_user', 'account_id', 'user_id');
}
public function roles() {
return $this->belongsToMany('App\Role', 'account_role_user', 'account_id', 'role_id');
}
Роль:
public function users() {
return $this->belongsToMany('App\User', 'account_role_user', 'role_id', 'user_id');
}
public function accounts() {
return $this->belongsToMany('App\Account', 'account_role_user', 'role_id', 'account_id');
}
account_role_user
Кол-во: user_id
, role_id
, account_id
Пользователь может принадлежать ко многим различным учетным записям и иметь много разных ролей в разных учетных записях.
Таким образом, они часто принадлежат учетной записи «Филлис» с ролью администратора, и они также могут принадлежать учетной записи «Астрос» с ролью менеджера.
Достаточно просто запросить одну связь, например App\User::find(2)->accounts
или App\User::find(2)->roles
, но у меня проблемы с третьими отношениями.
В данный момент я просто пытаюсь запросить их все и отобразить на странице.
Итак, я ' Я хотел бы перечислить учетные записи, к которым принадлежит текущий пользователь, а также их роль в этой учетной записи.
Редактировать: Дилип Хирапара предоставил следующий запрос
Account::with('users.roles')->wherehas('users', function($q){
$q->where('users.id','=', 2);
})->get();
Первый индекс коллекция:
Illuminate\Database\Eloquent\Collection {#3024
all: [
App\Account {#3069
id: 1,
company: "astros",
created_at: "2020-02-25 12:35:06",
updated_at: "2020-02-25 12:35:06",
users: Illuminate\Database\Eloquent\Collection {#3085
all: [
App\User {#3071
id: 1,
name: "alex",
email: "alex@fo.com",
email_verified_at: null,
created_at: "2020-02-25 12:35:06",
updated_at: "2020-02-25 12:35:06",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3083
account_id: 1,
user_id: 1,
},
roles: Illuminate\Database\Eloquent\Collection {#3094
all: [
App\Role {#3096
id: 1,
level: "owner",
created_at: "2020-02-25 12:32:50",
updated_at: "2020-02-25 12:32:50",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3099
user_id: 1,
role_id: 1,
},
},
],
},
},
App\User {#3084
id: 2,
name: "jeb",
email: "jebbush@gmail.com",
email_verified_at: null,
created_at: "2020-02-25 12:36:57",
updated_at: "2020-02-25 12:36:57",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3039
account_id: 1,
user_id: 2,
},
roles: Illuminate\Database\Eloquent\Collection {#3091
all: [
App\Role {#3097
id: 2,
level: "admin",
created_at: "2020-02-25 12:32:50",
updated_at: "2020-02-25 12:32:50",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3088
user_id: 2,
role_id: 2,
},
},
App\Role {#3100
id: 3,
level: "manager",
created_at: "2020-02-25 12:32:50",
updated_at: "2020-02-25 12:32:50",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3090
user_id: 2,
role_id: 3,
},
},
],
},
},
],
},
}
Данные в моей базе данных выражаются как
alex@fo.com
(пользователь) - owner
(роль) в astros
(учетная запись)
jebbush@gmail.com
(пользователь) равен admin
(роль) в astros
(учетная запись)
jebbush@gmail.com
(пользователь) равен manager
(роль) для phillies
(учетная запись)
Таким образом, вы заметите, что запрос получает ВСЕ роли от пользователя независимо от учетной записи.
Итак, я хотел бы запросить учетные записи с указанием пользователей и их ролей. (роли, которые у них есть в указанной c учетной записи)
Также правильны ли мои модельные отношения? Должен Account
belongsToMany
Role
?