2017-01-16 67 views
7

我有一個Company模型中,我想定義與User模型兩個關係:在我companies數據庫中的表,這是一個外鍵Laravel - 在同一個模型上有hasMany()以及hasOne()關係?

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

    public function administrator(){ 
    return $this->hasOne('App\User', 'superuserid'); 
    } 

我有一個superuseridusers表的id

我只想知道這是一個好策略還是可能?

+6

您的理念非常好。 – scottevans93

+1

你可能會考慮使用'superuser_id',你可能會考慮使用'App \ User :: class'而不是字符串作爲第一個參數,除此之外你可以在兩個模型之間有10個關係。 – Kyslik

+0

@Kyslik,你爲什麼會建議使用第一個參數? – omrakhur

回答

1

是的,這是一個很好的策略,它是可能的。

在您的模型中,您可以定義與模型需要的關係。這些關係可以是不同的類型(hasOne,hasMany,belongsTo等)。

就你而言,由於公司有多個用戶,屬於超級用戶,所以我們有兩種不同的關係,顯然,我們需要在模型中創建兩種方法來表示這兩種關係。

另一個例子:你和你父親之間的關係。假設有一個用戶模型的實現:

class User extends Model 
{ 

    public function children() 
    { 
    return $this->hasMany(User::class, 'id_parent'); 
    } 

    public function dad() 
    { 
    return $this->belongsTo(User::class, 'id_parent')->where('gender', 'male'); 
    } 

} 

這裏用戶可以有很多孩子,但只屬於一個父親。