2015-02-05 44 views
0

我怎樣才能實現一元多到許多關係與雄辯車型實現具有雄辯的機型一元多到許多關係[Laravel]

例如:如果有一種關係:用戶可以發送請求朋友到一個或多個用戶

我知道,我要創建像用戶請求用戶新模型預報的新模式主鍵將[user1_id,user2_id]這就是我日墨

,但如何實現這種關係的話..

回答

1

是的,親愛有可能在就像普通的多對多的關係,但有一點區別。 多對多關係的第一步是創建數據透視表,以便爲數據透視表創建遷移。數據透視表是屬於兩個表中正常多對多的關係,而且這個數據透視表是屬於一個table.if您創建的數據透視表名「friend_request_user」,所以這裏是遷徙

public function up() 
{ 
    Schema::create('friend_request_user', function(Blueprint $table) 
    { 
     $table->integer('user_id')->unsigned()->index(); 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

     $table->integer('request_user_id')->unsigned()->index(); 
     $table->foreign('request_user_id')->references('id')->on('users')->onDelete('cascade'); 

     $table->timestamps(); 

    }); 
} 

現在你應該有兩個模型一個「用戶」和其他,因爲你已經有「用戶請求用戶」。這兩個模型都應該指向同樣的「用戶」表。默認情況下,用戶模式是指向用戶表,但是你寫一個屬性$表指向「用戶」表「用戶請求用戶」模式,使

protected $table = 'users'; 

在用戶模式,你只寫一個簡單的方法寫在任何其他的多對多關係......如此「belongsToMany」功能的

public function request(){ 
    return $this->belongsToMany('App\user-request-user', 'friend_request_user','user_id', 'request_user_id'); 
} 

第一個參數是關係模型,第二個是數據透視表名,第3是外鍵和4日是在數據透視表等關鍵應用。我們編寫這些參數只是因爲在這種情況下不遵循laravel語法。這一切,現在只是調用這個函數像

Auth::user()->request; 

你可能還喜歡用的功能,相反它可以在其它模式「用戶請求用戶」寫的,但這僅僅是爲您的需要。

public function nameOfFunction(){ 
    return $this->belongsToMany('App\User', 'friend_request_user', 'request_user_id', 'user_id'); 
}