2016-10-25 89 views
2

我有如下表關係:Laravel 5.3 hasManyThrough通過中間表

organizations 
    id - integer 

organization_users 
    organization_id - integer (FK) 
    user_id - integer (FK) 

users 
    id - integer 

我試圖通過雄辯的關係得到一個組織的所有用戶。這是我的Organization.php模型的關係:

class Organization extends Model 
{ 
    public function Users(){ 
     return $this->hasManyThrough('App\User', 'App\OrganizationUser', 
            'organization_id', 'user_id', 'id'); 
... 
} 

我已經試過這種關係如

return $this->hasManyThrough('App\User', 'App\OrganizationUser', 
            'user_id', 'organization_id', 'id'); 

的多種組合,但都轉起來有些相同的錯誤(這個人是從第一查詢):

Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not 
found: 1054 Unknown column 'organization_users.id' in 'on clause' (SQL: select 
`users`.*, `organization_users`.`organization_id` from `users` inner join 
`organization_users` on `organization_users`.`id` = `users`.`user_id` where 
`organization_users`.`organization_id` = 1)' 

是否有可能,我可以有關係檢索USER_ID對用戶表而不是Laravel試圖檢索organization_users.id查詢?如果不是,還有其他解決方法嗎?

+0

您的場景是多對多的關係。 'hasManyThrough'用於訪問距離關係,比如在「組織有很多用戶,並且用戶有很多帖子的情況下,所以你可以組織'hasManyThrough'帖子來間接從用戶訪問組織的帖子。」 –

回答

1

這是many to many的關係。

用戶模型:

public function organizations() 
{ 
    return $this->belongsToMany('App\Organization','organization_users'); 
} 

組織模式:

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

要,讓所有的用戶與他們的組織:

$users=User::with('organizations')->get(); 
foreach($users as $user) 
{ 
    print_r($user->name); 
    foreach($user->organizations as $organization) 
    { 
    print_r($organization->name); 
    } 
} 
+0

是的,我試圖描述多對多的關係。謝謝你指出。奇蹟般有效。 –