我目前正在开发一个项目,我有用户,角色和他们的个人资料。
用户模型只有电子邮件和密码字段,角色模型有名称和描述字段。它们在数据透视表上具有belongsToMany关系。
我在单独的模型类上有3个不同的配置文件,这些配置文件与具有hasOne关系的用户模型相关联。我正在尝试根据用户的角色为用户分配个人资料模型,因为每个角色都有不同的目的和不同的字段。
public function getUserProfile($roleName)
{
switch($roleName) {
case 'callcenter':
$this->profile = $this->adminProfile();
break;
case 'manager':
$this->profile = $this->adminProfile();
break;
case 'admin':
$this->profile = $this->adminProfile();
break;
case 'student':
$this->profile = $this->studentProfile();
break;
case 'staff':
$this->profile = $this->staffProfile();
break;
}
}
上面的函数在a下面的每个循环中被调用
public function profile()
{
foreach($this->roles as $role){
$this->getUserProfile($role->name);
}
return $this->profile;
}
profile方法返回hasOne关系对象,并根据switch case匹配分配profile属性。
如果我使用配置文件查询单个用户,它会返回配置文件,但是当我使用配置文件查询所有用户并通过if语句循环它们以获取角色匹配的配置文件时,配置文件返回null,尽管它们在数据库中并且附在用户身上。
$users = User::with('profile')->get();
$staff = [];
foreach($users as $user)
{
if('staff' == $user->getUserRole()->name){
$staff[] = $user;
}
}
return $staff;
Callcenter,经理和管理员角色返回正确的个人资料,但员工和学生个人资料返回null。我试图理解这种行为背后的原因。我很感激任何解释,以帮助我做到这一点。