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

如何从模型获取ID?用户模型中登录用户关注判断的ID获取问题

看起来你在这里搞混了关联方向和逻辑,我来帮你理清楚并修正这个问题~

问题分析

你想要实现的是:判断当前登录用户是否关注了正在被查看资料的用户(也就是当前User模型实例对应的用户)。但原函数的逻辑有点绕,而且关联方向不对——$this->hasMany('App\Follow', 'user_id')定义的是“当前用户作为关注者,他关注的所有人”,和你实际需求的方向刚好相反,同时用when分支处理登录状态也可以更简化。

解决方案

我们可以在User模型里写一个更直观的方法,直接实现判断逻辑:

方法1:利用关联关系(推荐,复用性高)

先定义followers关联(代表关注当前用户的粉丝),再基于这个关联判断登录用户是否在粉丝列表中:

// User.php
use Illuminate\Support\Facades\Auth;
use App\Follow;

// 定义关联:关注我的人(粉丝)
public function followers()
{
    return $this->hasMany(Follow::class, 'followed_id');
}

// 判断登录用户是否关注了当前用户
public function isFollowedByAuthUser()
{
    // 未登录直接返回false
    if (!Auth::check()) {
        return false;
    }

    // 检查登录用户是否在当前用户的粉丝列表里
    return $this->followers()
        ->where('user_id', Auth::id())
        ->exists();
}

方法2:直接查询Follow表(更简洁,无需额外关联)

如果不需要复用followers关联,也可以直接写查询逻辑:

// User.php
use Illuminate\Support\Facades\Auth;
use App\Follow;

public function isFollowedByAuthUser()
{
    if (!Auth::check()) {
        return false;
    }

    return Follow::where([
        'user_id' => Auth::id(),
        'followed_id' => $this->id
    ])->exists();
}

关于你提到的「获取被查看用户的ID」

其实这个ID就是当前User模型实例的$this->id——当你在控制器中获取被查看的用户(比如$profileUser = User::findOrFail($id)),调用$profileUser->isFollowedByAuthUser()时,$this->id就是这个被查看用户的ID,而登录用户的ID可以通过Auth::id()直接获取,完全不需要额外去“获取”。

使用示例

在控制器中传递用户到视图:

// ProfileController.php
public function show($id)
{
    $user = User::findOrFail($id);
    return view('profile.show', compact('user'));
}

在视图中根据判断结果显示对应按钮:

<!-- profile/show.blade.php -->
@if($user->isFollowedByAuthUser())
    <button class="btn btn-secondary">已关注</button>
@else
    <form action="{{ route('follow.store', $user) }}" method="POST">
        @csrf
        <button class="btn btn-primary" type="submit">关注</button>
    </form>
@endif

这样就可以完美实现你想要的功能啦~

内容的提问来源于stack exchange,提问作者Bartosz Rudziński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:35