推荐程序雄辩:自我引用表与枢轴一对多



对于推荐计划,我有两个表。users(有一个id和一些其他列)和referrals(有一个referrer_id和一个referred_id)

User可能有多个引用用户,而User可能只有一个引用用户User。所以User模型应该像这样:

class User extends Model 
{
    public function referrerUser()
    {
        // There may be only one referrer user for this user
    }
    public function referredUsers()
    {
        // There may be many referred users for this user
    }
}

我读了一些关于这个的消息,但是我对正确的方法有点困惑。那么,我如何使用belongsTo(用于referrerUser方法)和belongsToMany(用于referredUsers方法)返回这些关系?

您可以取消推荐人数据透视表。在belongsTo - hasMany关系中不需要这样做。这与任何类似关系的工作原理相同,您只是引用相同的表。因此,您的users表需要一列来存储referrer_id,那么您的模型可以像这样:

class User extends Model 
{
    public function referrerUser()
    {
        return $this->belongsTo('AppUser', 'id', 'referrer_id');
    }
    public function referredUsers()
    {
        return $this->hasMany('AppUser', 'referrer_id', 'id');
    }
}

你可能得把键调换一下。我总是把它们搞混

最新更新