頁表
(1)
|
|
(*)
User_Moderate_Page(*)-----------(1)ACCESS_LEVEL表
(*)
|
|
(1)
用戶表
如何在CakePhp中建立三元關係?
如何I型在CakePHP這樣的三元關係? 用戶到頁面可以使用hasBelongtoMany關係進行建模。但是User_Moderate_page只是一個關聯表,我甚至應該在Cake中爲User_Moderate_Page編寫一個模型?
頁表
(1)
|
|
(*)
User_Moderate_Page(*)-----------(1)ACCESS_LEVEL表
(*)
|
|
(1)
用戶表
如何在CakePhp中建立三元關係?
如何I型在CakePHP這樣的三元關係? 用戶到頁面可以使用hasBelongtoMany關係進行建模。但是User_Moderate_page只是一個關聯表,我甚至應該在Cake中爲User_Moderate_Page編寫一個模型?
我不確定CakePHP是否接受此操作,但您應該做的是使用主鍵和3個外鍵創建表。有點像這樣:
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
現在,我不知道將蛋糕烤這個表,所以你可能要嘗試做手工模型,這個表必須屬於關聯的其他3個表。其他3個非關聯表必須與其他2個關係具有HMABTM關係,例如用戶HMABTM訪問級別和頁面等。
再次,不知道它是否會工作。我會建議也許試着看看你是否可以用不同的方式建模。
查找ACL。這是複雜的,但它是你所需要的(尤其是如果你需要設置誰可以調節什麼頁面的靈活性)
讓我用通用表來描述它: 假設你有3個表格 - 第一個,秒,三分之一 - 每個都帶有主鍵'id'。
讓你的連接表被稱爲 'firsts_seconds_thirds' 與外鍵到每一個主表:
通常我們定義t之間的HABTM關係ABLES,在這種情況下,我們需要創建一個連接表蛋糕模型 - 讓叫它FirstsSecondsThird(通過CakePHP的命名約定)
您需要定義模型之間的關係是:
的需要,這是在這裏解釋 - 協會:Linking Models Together
代碼相同:
class First extends AppModel {
public $hasMany = array(
'FirstsSecondsThird' => array(
'className' => 'FirstsSecondsThird',
'foreignKey' => 'first_id'
)
);
}
//Same for classes 'Second' and 'Third'
class FirstsSecondsThird extends AppModel {
public $belongsTo = array(
'First' => array(
'className' => 'First',
'foreignKey' => 'first_id'
),
'Second' => array(
'className' => 'Second',
'foreignKey' => 'second_id'
),
'Third' => array(
'className' => 'Third',
'foreignKey' => 'third_id'
)
);
}
的模型是完全建立,但現在插入/更新/從主/連接表中刪除應該正確完成,否則它們是沒有用的。 Model::saveMany()
和Model::saveAssociated()
,需要使用'deep'等選項。閱讀有關它here。
您還需要考慮關於這些連接表的ON DELETE RESTRICT/CASCADE,並對它們進行適當的建模。