【问题标题】:Userpermission pivot-function is only accessible via the Auth classUserpermission pivot-function 只能通过 Auth 类访问
【发布时间】:2021-01-04 05:35:54
【问题描述】:

我有一个简单的用户权限系统,由 3 个表组成:用户、权限和数据透视表权限_用户。

这是用户模型:

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function permissions()
    {
        return $this->belongsToMany('App\Permission');
    }

}

这是权限模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Permission extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'description', 'level', 'parentpermission',
    ];

    public function users()
    {
        return $this->belongsToMany('App\User');
    }


}

现在,当我尝试获取当前登录用户的所有权限时:

 $user_permissions = Auth::user()->permissions()->get();

它可以正常工作。

但是当我尝试像这样获得另一个用户权限时:

$user_permissions = User::where('id', '=', $userid)->permissions()->get();

我收到以下错误:

Method Illuminate\Database\Eloquent\Collection::permissions does not exist.

我该怎么做?

【问题讨论】:

    标签: php laravel eloquent model pivot-table


    【解决方案1】:

    这样做 -

    $user_permissions = User::find($userid)->permissions()->get();
    

    【讨论】:

      【解决方案2】:

      只需添加first() 方法即可获取一条记录并获取其权限,试试这个:

      $user_permissions = User::where('id', '=', $userid)->first()->permissions;
      

      无需使用get()方法,直接获取所有用户权限

      【讨论】:

        【解决方案3】:

        我认为您在这里缺少first(),因为您无法获取查询构建器对象的关系。试试这个:

        $user_permissions = User::where('id', '=', $userid)->first()->permissions()->get();
        

        这个first()实际上会返回User对象,然后你就可以加载它的关系了。

        【讨论】:

        • 非常感谢 - 这就是问题所在!我想现在我明白这一切是如何运作的
        • 没问题。很高兴我能帮助你。编码愉快!
        猜你喜欢
        • 2021-09-12
        • 2013-11-15
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多