2016-01-02 63 views
3

我有一個處理用戶信息的應用程序,我們收集的數據之一是他們參加的學校。我們有一個User對象,School對象和一個UserSchool對象。在Laravel中使用關係用橋表提供口才

這是user_schools表:

user_id (int),school_id (int)

隨着例如以下記錄:

100, 20 
200, 500 
200, 10 
300, 10 

我試圖讓所有學校當前用戶(用戶說200) 。這是我的UserSchool對象:

class UserSchool extends Model 
{ 
    var $table = 'user_schools'; 

    function user() { 
     return $this->belongsTo('User'); 
    } 

    function school() { 
     return$this->belongsTo('School'); 
    } 

} 

User我有如下關係式:

public function schools() 
    { 
     return $this->hasManyThrough('School', 'UserSchool'); 
    } 

    public function userSchools() 
    { 
     return $this->hasMany('UserSchool'); 
    } 

當我var_dump($user->schools)我沒有得到任何結果,即使我知道自己應該返回多個School秒。我究竟做錯了什麼?我確定這個問題以前一定是問過的,但我不知道這個中間類型關係的實際術語是什麼(橋接表?樞軸表?)。

編輯:無論哪種方式,我看過的大多數例子都沒有奏效。我也試過:

public function schools() 
    { 
     return $this->hasManyThrough('School', 'UserSchool', 'school_id'); 
    } 

回答

4

事實上,你並不需要在這裏有UserSchool對象這種關係

對於User模型,你可以使用創建以下關係:

public function schools() 
{ 
    return $this->belongsToMany(School::class, 'user_schools'); 
} 

現在你可以得到使用這樣的學校的用戶:

$user = User::find(1); 
foreach ($user->schools as $school) 
{ 
    echo $school->name; 
} 

這是標準的many to many relationship

+0

工作得很好,但是對於PHP 5.4而言,必須將School :: class更改爲「School」。謝謝。我會認爲一個hasManyThrough關係是需要的,所以謝謝你以正確的方式指點我。 – StackOverflowed