Laravel - Switch Case在关系对象上返回null

时间:2015-01-27 09:30:07

标签: php laravel switch-statement relationship

我目前正在开发一个项目,我有用户,角色和他们的个人资料。

用户模型只有电子邮件和密码字段,角色模型有名称和描述字段。它们在数据透视表上具有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。我试图理解这种行为背后的原因。我很感激任何解释,以帮助我做到这一点。

0 个答案:

没有答案