【问题标题】:Eloquent Table Relationships雄辩的表关系
【发布时间】:2015-12-05 10:32:16
【问题描述】:

您好,我刚刚意识到我对这些关系感到非常困惑,我有一个问题需要问。假设我有两个记录表。

角色

Administrator
Manager
Employee

用户

User 1
User 2
User 3

现在我想在这两个表之间创建一个关系,在这种情况下每个用户只能有一个角色但是我如何表达这种关系?

更具体地说,是表中的用户行只能有一个角色还是整个用户表?

如果整个 users 表只能有一个角色,那么在 User 1User 2 都是管理员的情况下,关系将变为多对多

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    您可以先查看 Laravel/Eloquent 中有关关系的文档:http://laravel.com/docs/5.1/eloquent-relationships

    您的课程将如下所示:

    class User extends Model
    {
        public function role()
        {
            return $this->hasOne('App\Role');
        }
    }
    
    class Role extends Model
    {
    }
    

    这意味着每个User 都有一个Role - 它不会阻止同一个角色属于多个用户。

    【讨论】:

      【解决方案2】:

      我好像会变成这样。

      榜样

      public function users()
      {
          return $this->hasMany('App\User');
      }
      

      用户模型

      public function role()
      {
          return $this->belongsTo('App\Role');
      }
      

      也就是说,一个角色可以有很多用户,一个用户属于一个角色。

      所以 User1 和 User2 都可以是管理员。查看 laracast 了解有关关系的更多信息

      【讨论】:

        【解决方案3】:

        我认为,在角色-用户关系中使用多对多会更好,因为如果您现在想为一个用户使用一个角色,那么将来您可能需要为用户使用多个角色。此外,ManyToMany 并不比 One-to-Many 慢,但它更强大的决策。

        榜样

        public function users()
        {
            return $this->belongsToMany('App\User');
        }
        

        用户模型

        public function role()
        {
            return $this->belongsToMany('App\Role');
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-06
          • 1970-01-01
          • 2021-12-15
          相关资源
          最近更新 更多