2016-06-09 58 views
0

我在使用Laravel的hasManyThrough關係(L5.2)時遇到了一些問題。Laravel的hasManyThrough使用加入錯誤的關鍵?

我有用戶和組,而不是一個標準的連接表或自定義樞軸模型,我使用另一個名爲GroupMembership的雄辯模型來鏈接這兩個。下面是類的相關部分:

class User extends Model { 

    use SoftDeletes; 

    protected $primaryKey = 'user_id'; 

    public function groupMemberships() { 
     return $this->hasMany(GroupMembership::class); 
    } 
} 


class GroupMembership extends Model { 

    protected $primaryKey = 'group_membership_id'; 

    public function user() { 
     return $this->belongsTo(User::class); 
    } 

    public function group() { 
     return $this->belongsTo(Group::class); 
    } 
} 


class Group extends Model { 

    use SoftDeletes; 

    protected $primaryKey = 'group_id'; 

    public function groupMemberships() { 
     return $this->hasMany(GroupMembership::class); 
    } 

    public function users() { 
     return $this->hasManyThrough(User::class, GroupMembership::class, 
      'group_id', 'user_id', 'group_id' 
     ); 
    } 
} 

我的問題是與$group->users()關係,在這裏我想通過GroupMembership關係得到一組中的所有用戶。當我嘗試訪問它時,生成的SQL爲:

select `users`.*, `group_memberships`.`group_id` from `users` 
inner join `group_memberships` 
    on `group_memberships`.`group_membership_id` = `users`.`user_id` 
where `group_memberships`.`group_id` = '10' 
and `users`.`deleted_at` is null 

在該查詢中,內部連接條件錯誤。它應該是group_memberships.user_id,而不是group_memberships.group_membership_id

我在做什麼錯?

回答

0

多虧了this post。我不想要hasManyThrough。我只是想belongsToMany指定自定義連接表:

public function users() { 
    return $this->belongsToMany(User::class, 'group_memberships'); 
} 

您還可以添加withPivot從加盟模式拉其他變量。

這裏唯一的缺點是,當使用$group->users時,每個$user->pivot模型將是默認的Eloquent pivot模型。如果我真的想訪問我的自定義模型,我需要實現類似this