2017-04-20 135 views
1

用戶模型中的關係,我想問問在這種情況下,最好的策略(與MySQL DB):Laravel 5.4:取決於角色

我得到了一個用戶模型/表。用戶可以有3種不同的類型:管理員,所有者和工作者。

  • 業主的hasMany位置
  • 的位置的hasMany工人
  • 工人屬於關聯一個位置

第一種選擇我看到:

是否有意義的所有者和工作者擴展用戶模型,因爲他們有共同的領域,並在用戶表中添加'角色'字段?

爲業主和員工創建2個其他表是否正確?

如何在這種情況下雄辯處理關係?

第二個選項(容易,但...):

管理,業主,工人3個不同的型號/表


然後我想要做的得到這樣的數據:

  • $位置 - >所有者() //獲取與 '所有者' 對這個位置的作用,用戶
  • $位置 - >工() //獲取與 '工人' 角色的用戶對這個位置
  • $業主 - >工() //獲取有關業主
+1

我會說保留單個用戶表,並採取角色中間表爲belongsToMany關係,這種方式將來時,如果用戶可以有很多角色,它將被處理。並且你可以在用戶模型上定義位置和工作者belongsTo關係它本身沒有問題,如果該關係沒有其他角色的數據,它將返回null。 –

+0

感謝但如何設置模型,以做到:$ location-> workers()或$ owner-> workers()? – sebap

回答

1
工人

最後,我用:

  • 用戶表
  • 角色表
  • ROLE_USER透視表
  • 位置表
  • location_user透視表

在用戶模式,一些queryScope方法通過角色檢索用戶:

public function scopeOwners($query) 
    { 
     $query->whereHas('roles', function ($q) { 
      $q->where('name','owner'); 
     }); 
    } 

很容易。