Laravel学习笔记(18)关注取关

  1. 建立中间表
artisan make:migration --create=followers create_followers_table
    public function up()
    {
        Schema::create('followers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->integer('user_id');
            $table->integer('follower_id');
        });
    }
artisan migrate
  1. 生成路由
Route::get('follow/{user}', 'UserController@followToggle')->name('follow');
  1. 前端
    <div class="text-center">
        <a href="{{route('follow', $user)}}" class="btn btn-success">{{$followerType}}</a>
    </div>
  1. User模型

此处的模型主体为微博的作者

	// 作者的关注者
    public function follower() {
        return $this->belongsToMany(User::class, 'followers', 'user_id', 'follower_id');
    }

	// 作者关注的人
    public function following() {
        return $this->belongsToMany(User::class, 'followers', 'follower_id', 'user_id');
    }

	// 判断作者是否已经被关注,此处$id为Auth::user()->id
    public function isFollower($id) {
        return $this->follower()->wherePivot('follower_id', $id)->first();
    }

	// 自动切换
    public function followerToggle($ids) {
        $ids = is_array($ids) ?: [$ids];
        return $this->follower()->withTimestamps()->toggle($ids);
    }
  1. 控制器
   public function show(User $user)
    {
    	// 判断是否已经关注,并返回前台按钮
        $followerType = $user->isFollower(Auth::user()->id)? '取消关注' : '关注';
        $blogs = $user->blogs()->paginate(10);
        return view('user.show', compact('user','blogs', 'followerType'));
    }
    
    // 切换关注状态
    public function followToggle(User $user) {
        $user->followerToggle(Auth::user()->id);
        return back();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值