0

EloquentORMモデルでいくつかの中間テーブルがどのようにあるかについての情報はどこにも見つかりません。私が直面している問題は、ユーザー、権限、および役割のテーブルがあることです。これらは4つのテーブルです:

権限:

id
name

Permission_roles:

id
name

Permission_role_mappings:

id
permission_id
permission_role_id

Permission_role_user_mappings:

id
permission_role_id
user_id

(まあ、私もusersテーブルを持っていますが、外部キーが入っているので、そのレイアウトは重要ではありませんpermission_role_user_mapping。)

permissionsしたがって、問題は、ユーザーモデルから呼び出すときにテーブルからデータを取得できるようにしたいということです。Eloquent ORMを使用したワークフローを完全に把握するのに問題があるため、重要な基本的なものが不足している場合は、それを指摘してください。

ドキュメントによると、中間テーブルのモデルを作成する必要はないようです。では、Userクラスから関係をどのように指定しますか?これに似たことができますか?

class User extends Eloquent {

    public function permission_role()
    {
        return $this->has_many_and_belongs_to('Permission_Role', 'permission_role_user_mappings');
    }

    public function permission()
    {
        return $this->has_many_and_belongs_to('Permission_Role', 'permission_role_user_mappings')->has_many_and_belongs_to('Permission','permission_role_mappings');
    }
}

これは機能していないようです。これはエラーです。

User::find(1)->first()->permission()->first();
...
Method [permission] is not defined on the Query class.

また、Permission_RoleとPermissionから開始してデータを取得できるようにしたいと思います。答えが必要なすべてのモデルを指定するのに役立つことを願っています。

4

1 に答える 1

2

雄弁なリレーションシップは、関数ではなくオブジェクト プロパティとしてアクセスされます。

User::find(1)->first()->permission;

上記のステートメントをdd関数でラップして、それを見ることができます。

雄弁な関係に関するこのガイドは役立つはずです

ロール内のすべての権限の選択に関するコメントの質問を編集します。

$roles = array();
$permission_roles = User::find(1)->permission_roles()->get();
foreach ($permission_roles as $pr) {
  if (! in_array($pr->permissions)) {
    $roles[] = $pr->permissions;
  }
}

これにより、必要なものが得られます。ただし、これは多くのクエリを実行することになります。ここを利用するのが一番Eager Loadingです。

于 2013-01-10T19:58:07.023 に答える