Laravel的hasManyThrough使用错误的键加入?

时间:2016-06-09 14:29:13

标签: laravel eloquent has-many-through

我在Laravel的hasManyThrough关系(L5.2)中遇到了一些问题。

我有用户和组,而不是标准的连接表或自定义枢轴模型,我正在使用另一个名为GroupMembership的Eloquent模型来链接这两者。这是课程的相关部分:

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.group_membership_id,它应该是group_memberships.user_id

我做错了什么?

1 个答案:

答案 0 :(得分:1)

通过this post计算出来。我不想要hasManyThrough。我只想要belongsToMany指定自定义连接表:

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

您还可以添加withPivot以从加入模型中提取其他变量。

这里唯一的缺点是,当使用$group->users时,每个$user->pivot模型将成为默认的Eloquent数据透视模型。如果我真的想访问自定义模型,我需要实现this之类的内容。