0

Eloquent を使用してユーザー権限を取得しようとしています

私は3つのテーブルを持っています、

1 つ目はusersテーブルです。

2番目は権限テーブルです

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 に答える