【问题标题】:How to access current user in Laravel Models (Laravel 8)如何在 Laravel 模型中访问当前用户(Laravel 8)
【发布时间】:2021-10-28 06:12:50
【问题描述】:

我想检查当前用户是否喜欢特定问题,并将结果(布尔值)存储到附加属性中,如下所示:

在我的问题模型中

use Illuminate\Support\Facades\Auth;


  public function usersWhoLikedThis()
{
    return $this->belongsToMany(User::class, 'question_user_likes');
}
  public function getHasLikedAttribute() {
    return $this->usersWhoLikedThis->contains(Auth::user()->id);
}

上述方法不起作用, 当我,dd(Auth::user()->id) 我得到 null

我的目标是返回一个问题列表,其中每个问题都有“has_liked”属性,如果当前用户喜欢该问题,则该属性为 true,否则为 false

【问题讨论】:

  • 如果Auth::user()->idnulluser 未登录,任何未登录的人也是如此,您必须使用仅允许登录用户的中间件保护该路由。
  • 你可能在 auth 中间件还没有运行的地方调用它

标签: laravel


【解决方案1】:

在您的控制器中搜索以查看它是否存在,但数据库会接受您也可以在您的模型中执行此操作

public function index(Question $question) {
    $isLiked = $question->usersWhoLikedThis()->where('user_id',auth()->id())->exists();
}

【讨论】:

    【解决方案2】:

    首先,您正在编写$this->usersWhoLikedThis->contains(Auth::user()->id),但usersWhoLikedThis 集合将包含User 模型,而不是它们的ID。所以你要做的是:

    public function getHasLikedAttribute() {
        return $this->usersWhoLikedThis->contains(Auth::user());
    }
    

    作为奖励,您不需要检查用户是否登录,因为它只会为客人返回 false。

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2022-01-01
      • 2018-02-07
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多