Я не уверен, что CakePHP принимает это, но вы должны создать таблицу с первичным ключом и тремя внешними ключами. Примерно так:
CREATE TABLE IF NOT EXISTS `mydb`.`access_levels_pages_users` (
`id` INT NOT NULL AUTO_INCREMENT ,
`page_id` INT NOT NULL ,
`access_level_id` INT NOT NULL ,
`user_id` INT NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_access_levels_pages_users_pages` (`page_id` ASC) ,
INDEX `fk_access_levels_pages_users_access_levels1` (`access_level_id` ASC) ,
INDEX `fk_access_levels_pages_users_users1` (`user_id` ASC) ,
CONSTRAINT `fk_access_levels_pages_users_pages`
FOREIGN KEY (`page_id` )
REFERENCES `mydb`.`pages` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_access_levels_pages_users_access_levels1`
FOREIGN KEY (`access_level_id` )
REFERENCES `mydb`.`access_levels` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_access_levels_pages_users_users1`
FOREIGN KEY (`user_id` )
REFERENCES `mydb`.`users` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
Теперь я не уверен, что Cake испечет эту таблицу, поэтому вам, возможно, придется попробовать сделать модели вручную, эта таблица будет принадлежать к 3 другим таблицам. Другие 3 таблицы, не связанные с таблицами, должны будут иметь отношение HMABTM с двумя другими, как в пользовательских HMABTM access_levels и pages и т. Д.
Опять же, не уверен, что это будет работать. Я бы посоветовал попытаться выяснить, можете ли вы смоделировать это по-другому.