You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:54:54