私はすでにデータベース構造が確立されているシステムのバックエンドを構築しようとしています。
開発プロセスでは、私は働くために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;
あなたが1つの役割に対してすべての権限を必要とする場合、関係は1:Mになる可能性があります。複数の権限を持つ1つの役割を意味するので、belongsToManyの代わりにPermissionModelにbelongsToを入れてみることをおすすめします –
@AlankarMore残念ながら、私はすでにその方法を試してきましたが、私はまだ応答で1つの許可値を取得しています –