CakePHPでACLを使用していて、現在のユーザーに許可されているすべてのエントリをフェッチしたいと思います。
簡略化すると、2つのテーブルがあります。
間隔:
**lft**| **rght**
10 | 20
40 | 60
90 | 92
Acos:
**foreign_key** | **lft** | **rght**
3 | 15 | 17
4 | 25 | 27
5 | 45 | 47
6 | 49 | 51
7 | 81 | 83
ここで、間隔からlftとrghtの間にlftとrghtの値を持つforeign_keysFROMAcosをフェッチしたいと思います。
上記の例では、foreign_key 3、5、6を取得します。
ちなみに。「間隔」テーブルは実際には存在しません。値はこのクエリ(およびacosテーブル)から取得されました。
SELECT lft, rght FROM acos WHERE id IN (
SELECT aco_id FROM aros_acos WHERE
aro_id = (SELECT parent_id FROM aros WHERE foreign_key = 48 && model = 'User' )
OR
aro_id = (SELECT id FROM aros WHERE foreign_key = 48 && model = 'User' )
)
上記の例があまりにも乱雑であることを望みません。不確かな点があればコメントしてください。前もって感謝します!