0

我正在尝试使用 Eloquent 获取用户权限

我有3张桌子,

第一个是用户表,

第二个是权限

第三个是user_permissions

结构非常简单

users
-id
-name

permissions
-id
-name

user_permissions
-user_id
-permission_id
-read
-write
-update
-delete

这是显示用户权限的代码:

$user = App\User::find(1)->first();
foreach($user->permissions as $permission){
    echo "Read".$permission->pivot->read."<br>";
    echo "Write".$permission->pivot->write."<br>";
    echo "Update".$permission->pivot->update."<br>";
    echo "Delete".$permission->pivot->delete."<br>";
}

当我以这种方式定义关系时(在用户模型中),一切正常:

public function permissions()
{
    return $this->belongsToMany('App\Permission','user_permissions')->withPivot('read', 'create','update','delete');
}

但我想以另一种方式编写它,因为我不想选择我需要的字段,我只想选择它们,所以当我这样写时,我得到一个错误:

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

这是我的错误:

Builder.php 第 2440 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::using()

4

2 回答 2

0

而不仅仅是:

return $this->belongsToMany('App\Permission','user_permissions')->withPivot('read', 'create','update','delete');

您可以在数据透视模型中定义一个常量/变量:

class UserPermission extends Pivot
{
    const PIVOT_ATTRIBUTES = [
        'read', 
        'create',
        'update',
        'delete'
    ];

    // . . .
}

接着:

public function permissions()
{
    return $this->belongsToMany(Permission::class, 'user_permissions')
        ->withPivot(UserPermission::PIVOT_ATTRIBUTES)
        ->using(UserPermission::class);
}

现在,您可以更新班级PIVOT_ATTRIBUTES中的常量。UserPermission

于 2017-05-13T18:41:11.297 回答
0

我不想选择我需要的字段 我只想选择它们

如果您的意思是您不想指定数据透视表中存在哪些字段,而是让它自动发生 - 您不能。从5.2 文档

默认情况下,只有模型键会出现在数据透视对象上。如果您的数据透视表包含额外的属性,您必须在定义关系时指定它们:

在 5.4 中仍然如此

于 2017-02-12T19:40:56.357 回答