2017-06-09 18 views
2

私はすでにデータベース構造が確立されているシステムのバックエンドを構築しようとしています。
開発プロセスでは、私は働くためにhasMany関係を取得する問題に直面しました。hasMany関係OctoberCMS | Laravel

私は2つのデータベーステーブルがあります:

問題が役割のデータベースでは、構造は、あなたができるように、この

RoleID | PermissionID 
1 |  1 
1 |  2 
1 |  3 
2 |  3 
3 |  5 

のように見えるということです

  • 権限
  • 役割を実際には3つの権限にリンクしている役割1のエントリが3つあります。

    と権限テーブルの

    、唯一の2列がある:idと名前が

    は、これまでのところ私は、少なくとも(原因1つの役割のために多くのエントリがあるという事実のために、それはしかし、働いて得ることができました私はそうだと思う)、私は唯一の役割ごとに1つの許可を得ている。

    質問は次のとおりです。関係を使用して1つのロールに対してすべての権限を取得する方法を教えてください。

    現在のコードためPermissionModel.php

    public $belongsToMany = [ 
        'roles' => [ 
         'Vendor\Database\Models\RoleModel', 
         'table' => 'roles', 
         'key => 'permissionID', 
         'otherKey' => 'id' 
        ] 
    ]; 
    

    現在のコードためRoleModel.php

    public $hasMany = [ 
        'permissions' => [ 
         'Vendor\Database\Models\PermissionModel', 
         'table'  => 'permissions', 
         'key'  => 'id', 
         'otherKey' => 'permissionID' 
        ] 
    ]; 
    

    と私はロールモデルを照会していたとき、私はちょうど1を取得していますロールごとのアクセス許可があるので、ロールごとに20のアクセス許可がある場合は、20の値を持つ1ではなく20の配列が得られます。

    本当にありがとうございます!ありがとうございました。その場合には仕事をする

    SQLクエリは、(テストとうまく働いて)次のようになります

    SELECT 
        roles.id as roleID, 
        (SELECT name FROM permissions WHERE permissions.id = 1) as roleName, 
        permissions.id as permissionID, 
        permissions.name as permissionName 
    FROM 
        permissions 
    LEFT JOIN 
        roles ON roles.permissionId = permissions.id 
    WHERE 
        roles.id = 1; 
    
+0

あなたが1つの役割に対してすべての権限を必要とする場合、関係は1:Mになる可能性があります。複数の権限を持つ1つの役割を意味するので、belongsToManyの代わりにPermissionModelにbelongsToを入れてみることをおすすめします –

+0

@AlankarMore残念ながら、私はすでにその方法を試してきましたが、私はまだ応答で1つの許可値を取得しています –

答えて

1

RolesPermissionsmany-to-many関係を持って、1つの役割は、多くの権限を持っており、1つの許可は、多くを持っています役割。あなたはone-to-manyの関係を間違って使用しています。 $hasManyは、one-to-manyの関係に使用されます。どちらのモデルでも、代わりに$belongsToManyを使用する必要があります。

  1. Permissions(2列:idとname)
  2. Roles(2列:idとname)
  3. Roles_Permissions(2列:RoleID、PermissionID)
次の3つのテーブルを持っている必要があります

many to many relationshipsを見て、あなたのアプローチを修正してみてください。