Laravel中的多态关系

时间:2018-08-15 09:45:34

标签: laravel polymorphism relationship

请帮帮我!

我有用户模型和迁移:id, login, password

3个角色和模型(AdminTeacherStudent),以及有关用户的更多信息。用户可以担任多个角色(他可以是管理员和老师) 还有一个带有列的多态模型角色:

user_id
roleable_id
roleable_type

例如User::find(1)->roles;

我希望结果显示两个模型(管理员和老师)。 拜托,帮我))

1 个答案:

答案 0 :(得分:0)

您可以尝试在用户模型https://gist.github.com/thisdotvoid/3022fee8afa53e45a6b89da3f16b3815中使用它来加载模型。添加所需的变形函数,然后向用户模型添加三个与此函数类似的函数(相应地更改名称和模型名称):

public function admin()
{
    return BelongsToMorph::build($this, 'App\Admin', 'rolable');
}

然后创建一个

之类的mutator函数。
function getRolesAttribute()
{
  $roles = new Collection();

  $roleNames = ['admin', 'teacher', 'student'];

  foreach ($roleNames as $role) {

     $hasRole = $this->{$role};

     if ($hasRole) {
       $roles->push($role);
     }

  }

  return $roles;
}