所以,我试图创建一种用户可以关注其他用户或关注类别的关系。 我的直觉说,到目前为止我所做的并不是正确的做事方式。我特别对如何创建关注者 - 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');
}
}
答案 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])
希望它有所帮助。