2016-06-09 61 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