Laravel 中不存在方法 Illuminate\Auth\SessionGuard::users

Posted

技术标签:

【中文标题】Laravel 中不存在方法 Illuminate\\Auth\\SessionGuard::users【英文标题】:Method Illuminate\Auth\SessionGuard::users does not exist in LaravelLaravel 中不存在方法 Illuminate\Auth\SessionGuard::users 【发布时间】:2021-09-11 09:39:14 【问题描述】:

我正在尝试附加角色、用户和 users_role 表。尝试连接它们并检查 Blade 文件,如果用户的角色是管理员,他只能访问用户的路由;否则,他无法访问它。对于其他用户,不能看到用户的路线。同时,验证 Blade 文件上的代码会引发错误。如何在最新的 Laravel 8 中解决这个问题?

app.blade.php

@if(Auth::users()->roles()->where('name', 'Admin')->exists())
    <li class="nav-item">
        <a class="nav-link" href=" url('/Admin/users')">Users</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href=" url('/Admin/Posts')">Posts</a>
    </li>
@else
    <li class="nav-item">
        <a class="nav-link" href=" url('/Admin/Posts')">Posts</a>
    </li>
@endif

榜样

public function users()

    return $this->belongsToMany(User::class, 'users_roles', 'user_id', 'role_id')
        ->using(UserRole::class);

用户模型

public function roles()

    return $this->belongsToMany(role::class, 'users_roles', 'role_id',
        'user_id')->using(UserRole::class)->withPivot('name');

错误

【问题讨论】:

@Rakesh Kumar Oad 你知道如何解决这个错误 是的,我已经解决了。 【参考方案1】:

在 rakesh 的帮助下回答 https://***.com/a/68176136/16114539 和一些修改,错误得到了解决.. 因此您可以检查当前用户并检查它的角色,然后显示代码如下:

    @if(Auth::check() &&  Auth::user()->roles()->where('name', 'Admin')->exists())

解决了

【讨论】:

【参考方案2】:

简单地替换这个

@if(Auth::users()->roles()->where('name', 'Admin')->exists())

进入

@if(\Auth::user()->roles =='Admin')

我希望你得到你的解决方案。

【讨论】:

对不起,你做了什么..无法理解..这是我检查角色的查询吗??? 现在我已经更新了我的答案,如果您有任何问题,请告诉我 @Rkesh Kumar Oad ?? 仍然没有得到相同的错误结果...我们可以使用 user 而不是 users ,但得到另一个错误 更新代码后出现新错误:---- 试图获取非对象的属性“角色”(查看:C:\xampp\htdocs\lara-media\resources\views\layouts \app.blade.php)

以上是关于Laravel 中不存在方法 Illuminate\Auth\SessionGuard::users的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8:方法 Illuminate\Database\Eloquent\Collection::latest 不存在

Laravel - 测试 api 时方法 Illuminate\Auth\RequestGuard::attempt 不存在

方法 Illuminate\Auth\RequestGuard::logout 不存在 Laravel Passport

方法 Illuminate\Auth\RequestGuard::attempt 不存在

方法 Illuminate\Support\Str::replace 不存在

Laravel/Ardent - 在 save() 上,错误:关系方法必须返回 Illuminate 类型的对象