[英]Laravel Role HasMany relationship
我有一個多對多關系的User Model
和Role Model
。 我有兩個角色:管理員和經理。 我也有一個Order Model
。 經理需要下很多訂單。 我在哪里聲明這種關系? 我必須在用戶類別中聲明嗎? 我需要為管理員和經理創建單獨的模型嗎?
User
和Role
之間的多對多關系可以通過belongsToMany
兩種方式的belongsToMany
關系方法完美地描述。 同樣,由於每個Order
必須有負責的經理,我們在Manager
和Order
之間也有一對多的關系,這將通過hasMany
/ belongsTo
方法來描述。
因此,您的User
模型將具有:
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function orders()
{
return $this->hasMany('App\Order');
}
為了您的Role
模型:
public function users()
{
return $this->belongsToMany('App\User');
}
最后是您的Order
模型:
public function manager()
{
return $this->belongsTo('App\User');
}
無需在數據庫架構級別上創建某些限制(例如“只有具有角色管理器的用戶才能下訂單”),因此在代碼中更容易實現。 因此,例如,您可能想要實現一種將為用戶分配順序並首先檢查其角色的方法。
經理和管理員是用戶的一個子集,由其角色定義。
因此,我們將使用范圍按角色來過濾作為管理員的用戶。
App \\ Scopes \\ ManagerUserScope.php
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class ManagerUserScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
//Assuming Your user has a relationship (has many) role
$builder->whereHas('role', function($roleQuery) {
//Assuming that in the role table, the manager role entry has ID 1
$roleQuery->where('id','=',1);
});
}
}
然后,我們擴展User
模型以創建具有自動應用上述范圍的管理器模型。
App \\ Models \\ Manager.php
namespace App\Models;
use App\Scopes\ManagerUserScope;
class Manager extends User {
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new ManagerUserScope);
}
/**
* Relationship: Orders (Has many)
*/
public function orders()
{
return $this->hasMany('orders');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.