好的,所以我正在尝试创建一种用户可以关注其他用户或关注类别的关系。我建议使用Polomorpic Many to Many关系。现在我正在尝试创建一个关注者 - followee 关系,但我无法理解如何设置模型和控制器。
TABLES
用户
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('password');
$table->string('first_name');
});
分类
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('category');
});
Followables
Schema::create('followables', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->integer('user_id');
$table->integer('followable_id');
$table->string('followable_type');
});
模型
用户
class User extends Model implements Authenticatable
{
public function followers()
{
return $this->morphToMany('App\Followable', 'followable');
}
public function following()
{
return $this->morphedByMany('App\Followable', 'followable');
}
//Use to get id from Auth facade
public function getId()
{
return $this->id;
}
}
从动的
class Followable extends Model
{
protected $fillable = ['user_id'];
public function followable()
{
return $this->morphTo();
}
}
类别模型关注者关系尚不存在,所以我现在暂时离开。
CONTROLLER
FollowableController
class FollowableController extends Controller
{
public function followUser($followable_id){
$user_id = Auth::user()->getId();
$followee = User::find($followable_id);
$followee->followers()->create(['user_id' => $user_id]);
return redirect()->route('get.user', ['user_id' => $followable_id]);
}
}
说实话,我对我创建的代码感到有点困惑。这是一些复制和粘贴而不理解我所做的100%。无论如何,这将在数据库中创建两个记录,如下所示:
从动的
-------------------------------------------------
|Id | user_id | followable_id | followable_type |
-------------------------------------------------
|22 | 4 | NULL | NULL |
-------------------------------------------------
|23 | 0 | 22 | App\User |
-------------------------------------------------
followable_id是错误的,似乎使用在Followable表中创建的Id而不是User表中的user_id。
那么,如何通过 right followable_id 解决只有一条记录被保存到数据库?
答案 0 :(得分:0)
我猜你使用的是错误的方法。我在Laravel的doc示例之后做了类似的事情,并且morphMany()
已经足够了,因为User
可以有很多关注者,这些关注者本身就是user
所以你可以拥有:
User
型号:
public function followers()
{
return $this->morphMany('App\Followable', 'followable');
}
然后你可以从控制器设置user_id(但不要忘记将它添加到fillable)。
希望有所帮助:)