0

私は CakePHP (昨夜から始めた) に非常に慣れておらず、クエリに問題があります。

私のモデルの仕組みは次のとおりです。

クラスグループ << hasAndBelongsTo >> ユーザー << hasAndBelongsTo >> PermissionsGroups

基本的に、クラスグループは多数のユーザーで構成され、各ユーザーは権限グループに属します。グループは、ユーザーのタイプと権限を定義します。

ここで、特定の PermissionGroup に属するすべてのユーザーを取得するクエリを作成する必要がありますが、ClassgroupsController から実行しています。

ただし、これを実行しようとするたびに:

$this->Classgroup->User->find('list', array(
            'fields' => array('User.surname_firstname'),
            'order' => array(
                    'User.surname_firstname'
                ),
            'conditions' => array(
                    'PermissionGroup.permissions' => '10'
                )
        )

次のエラーが表示されます。

Column not found: 1054 Unknown column 'PermissionGroup.permissions' in 'where clause'

私は ClassgroupController にいるため、Group フィールドが表示されないように見えますが、User は PermissionGroup に関連付けられているため、問題ないと思います。3 つのモデル間の関連付けを設定しましたが、クエリがモデルを十分に「深く」見ていないことが問題のようです。

また、検索の再帰値を 2、3、および 4 に設定しようとしました。私が読んだことから、これはおそらく素晴らしいアイデアではなく、Containable の方が優れていると思いますが、少なくとも機能するはずです。

また、これらの関連付けは一方通行であることも指摘しておく必要があります。必要なモデルにのみ追加しました。したがって、Classgroups には User への関連付けがあり、User には PermissionGroup への関連付けがあります。

私は明らかに間違ったことをしていますか?または、CakePHP の概念を誤解していますか? ありがとう

更新: 次のように、結合を使用する必要があると誰かが言うのを 2 度目に見ました。

'joins'=>array(
    array(
         'table'=>'rooms',
         'alias'=>'Room',
         'type'=>'inner',
         'conditions'=>array(
              'Room.hotel_id'=>'Hotel.id'
         )
    )

しかし、それは時代遅れの方法だと感じています...次のようにcontainsを使用してみました:

'contain' => array(
                'Group' => array(
                    'conditions' => array(
                        'Group.name' => '10'
                    )
                )
            )

しかし、うまくいきませんでした。まだすべてのユーザーを取得しています。

4

1 に答える 1

1

あなたは結合で正しい軌道に乗っていました:

$joins = array(
    array(
     'table'=>'permission_groups',
     'alias'=>'PemissionGroup',
     'type'=>'inner',
     'conditions'=>array(
          'User.id = PermissionGroup.user_id',
          'PermissionGroup.permissions = 10'
     )
 )


    $this->Classgroup->User->find('list', array(
        'fields' => array('User.surname_firstname'),
        'joins' => $joins,
        'order' => array(
                'User.surname_firstname'
            )
    )

それに取り組んでみてください!

于 2012-12-05T21:53:30.497 に答える