【问题标题】:Polymorphic relations in LaravelLaravel 中的多态关系
【发布时间】:2019-01-22 04:43:11
【问题描述】:

请帮帮我!

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

3 个角色和模型(AdminTeacherStudent)以及有关用户的更多信息。并且用户可以获得多个角色(他可以是管理员和教师) 和一个多态模型角色与列:

user_id
roleable_id
roleable_type

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

我希望结果显示两个模型(管理员和教师)。 请帮帮我))

【问题讨论】:

  • 是管理员、教师和学生用户模型还是只是角色?
  • 在用户中仅存储登录名和密码。注册后,他可以选择角色:管理员、教师和学生。并写下更多关于他的信息。但他可以是管理员和老师(一对多)。为此,我需要具有列 user_id - 1(来自用户模型)、roleable_id - 1(来自管理模型)、roleable_type - App\Admin 的多态模型角色。下一行:user_id - 1、roleable_id - 1、roleable_type - App\Teacher 等
  • 所以不,管理员、教师和学生不是用户模型。我只是不明白为什么需要将您的角色设置为多态...对于管理员来说,role_id 1 和 role_id 2 有什么区别?
  • 是的,Admin、Teacher 和 Student 是独立的模型

标签: laravel polymorphism relationship


【解决方案1】:

您可以尝试在您的用户模型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;
}

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2017-05-13
    • 2016-05-26
    相关资源
    最近更新 更多