Laravel Eloquent:查询Pivot表判断当前用户投票状态及类型
解决方案
首先确保你的模型关联正确配置,要在关联中指定携带中间表的type字段,否则无法获取投票类型:
// app/Models/Post.php public function voters() { return $this->belongsToMany(User::class)->withPivot('type'); }
方法一:直接通过关联查询(推荐,更高效)
这种方式不会加载所有投票用户,直接查询当前用户与该帖子的关联记录:
$userVote = $post->voters() ->where('user_id', auth()->id()) ->first(); // 判断投票状态 if ($userVote) { $voteType = $userVote->pivot->type; // 结果为 'up' 或 'down' // 执行已投票的相关逻辑 } else { // 用户未对该帖子投票 }
方法二:从已加载的投票用户集合中查找
如果已经通过$post->voters加载了所有投票用户集合,可以直接在集合中查找当前用户:
$userVote = $post->voters->where('id', auth()->id())->first(); if ($userVote) { $voteType = $userVote->pivot->type; }
你之前代码的问题
$post->voters->find(auth()->user()->id)返回的是单个User模型实例,而wherePivot()是关联查询构建器的方法,不能直接在模型实例上调用,所以你的写法会报错。
内容的提问来源于stack exchange,提问作者Sadan Khan
相关产品推荐
相关产品推荐

