如何使用Eloquent和Laravel创建关注者关系?

时间:2017-02-09 10:37:10

标签: php laravel eloquent

所以,我试图创建一种用户可以关注其他用户或关注类别的关系。 我的直觉说,到目前为止我所做的并不是正确的做事方式。我特别对如何创建关注者 - followee 关系感到困惑。

TABLES:

用户

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('email');
            $table->string('password');
            $table->string('first_name');
        });
    }

分类

public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('category');
        });
    }

遵循

public function up()
    {
        Schema::create('follows', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('follower_id');
            $table->integer('followee_id')->nullable();
            $table->integer('category_id')->nullable();
        });
    }

模型:

用户

class User extends Model implements Authenticatable 
{

    public function follows()
    {
        return $this->hasMany('App\Follow');
    }
}

分类

class Category extends Model
{

    public function follows()
    {
        return $this->hasMany('App\Follow');
    }
}

class Follow extends Model
{
    public function post()
    {
        return $this->belongsTo('App\User');
    }
    public function source()
    {
        return $this->belongsTo('App\Category');
    }
}

1 个答案:

答案 0 :(得分:0)

根据您的方案,建议您使用Polymorphic Many To Many关系。

<强>架构:

users
    id - integer
    ...

categories
    id - integer
    ...

followables
    user_id - integer
    followable_id - integer
    followable_type - string

<强>型号:

用户:

public function followers()
{
    return $this->morphToMany(User::class, 'followables');
}
public function following()
{
    return $this->morphedByMany(User::class, 'followables');
}

类别:

public function followers()
{
    return $this->morphToMany(User::class, 'followables');
}

然后你可以创建如下的关系:

关注用户时:

$user->followers()->create(['user_id' => 12])

关注类别时:

$category->followers()->create(['user_id' => 25])

希望它有所帮助。