提问者:小点点

Laravel口才-多对多与数据透视表的位置


我试着看看做下面的事情最好的方法是什么。

我有3个表:users、items和item_user。

users和items表非常通用,id和几列来保存任何数据。

item_user表具有以下结构ID
item_id
user_id
user_type[1-所有者2-追随者3-其他内容]

关系:每个项目有一个所有者(用户类型)
每个项目有许多追随者
每个用户可以拥有许多项目
每个用户可以追随许多项目

我希望所有者和追随者是用户表,这样我就不需要复制用户数据。我创建了一个item_id、user_id和user_type的透视表来保存这些关系。

所以问题是我如何做到这一点,拉拉维尔雄辩?

项模型如下所示:

public function user() {
    return $this->belongsToMany('Users');
    // This isn't actually correct since it belongs to only one User but not sure how to specify a where user_type = 1;
    // return $this->belongsTo('User');
}

用户模型如下所示:

public function item() {
    return $this->hasMany('Item');
}

谢谢!


共1个答案

匿名用户

您只需将条件附加到belomstomany声明:

public function user() {
    return $this->belongsToMany('Users')->where('user_type', 1);
}

这将只返回透视表中user_type=1user条目。为了更加清楚,您可以将方法命名为owner(),而不是user(),以反映添加的条件。