laravel 记录一次赞 与 取消赞 的功能开发

<p>
  @if(!$post->agree(Auth::id())->exists())
    <a href="{{route('user.post.agree',['id'=>$post->id])}}" class="btn btn-info">赞</a>
  @else
    <a href="{{route('user.post.unAgree',['id'=>$post->id])}}" class="btn btn-default">取消赞</a>
  @endif
</p>

 

如上所示,赞和取消赞是两个链接,对应到控制器里的两个方法去实现赞和取消赞

 

//赞文章
public function agree($id)
{
Agree::firstOrCreate(['post_id'=>$id,'user_id'=>Auth::id()]);
return redirect()->back();
}

//取消赞文章
public function unAgree($id)
{
Agree::where([['post_id',$id],['user_id',Auth::id()]])->delete();
return redirect()->back();
}

 

在赞的表主要有两个字段 user_id 和 post_id 哪个用户对哪个文章进行了赞,赞和取消赞既是对这个表进行添加记录和删除记录

 

不论是在控制器还是视图 都可以直接使用 Auth::id() 来进行获取登陆用id ,当然,你得在上面 use 下Auth门脸类

 

//一篇文章-当前登陆用户的赞
public function agree($user_id)
{
return $this->hasOne('App\Agree')->where('user_id',$user_id);
}

//一篇文章对应多个赞
public function agrees()
{
return $this->hasMany('App\Agree');
}

在post模型中,对赞表进行关联,有两个关联,一个是当前登陆用户的对当前赞获取,一个是当前文章的所有赞的获取

 

在视图中进行判断显示赞还是取消赞,使用模型关联的agree来判断

 

如最上面的代码所示使用当前文章$post->agree( Auth::id() )->exists();   当前文章$post的关联模型agree的agree方法,传入参数为当前用户id,返回值为,赞表中user_id为当前登陆用户的id , post_id为当前显示的文章的id的记录,exists方法来判断是否存在,如果存在这条记录,就显示取消赞,如果不存在,就显示赞

 

posted @ 2018-05-10 14:34  沐屋  阅读(167)  评论(0编辑  收藏  举报