2012-05-28 50 views
0

我想在創建子項時自動創建父記錄。Kohana orm繼承

例子。

CREATE TABLE IF NOT EXISTS `front_end_users` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `userid` int(11) unsigned NOT NULL, 
    `tel` varchar(20) NOT NULL, 
    `addr1` varchar(255) NOT NULL, 
    `addr2` varchar(255) NOT NULL, 
    `city` int(11) NOT NULL, 
    `zip` varchar(10) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_userid` (`userid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `email` varchar(127) NOT NULL, 
    `username` varchar(32) NOT NULL DEFAULT '', 
    `password` char(64) NOT NULL, 
    `logins` int(10) unsigned NOT NULL DEFAULT '0', 
    `last_login` int(10) unsigned DEFAULT NULL, 
    `reset_token` char(64) NOT NULL DEFAULT '', 
    `status` varchar(20) NOT NULL DEFAULT '', 
    `last_failed_login` datetime NOT NULL, 
    `failed_login_count` int(11) NOT NULL DEFAULT '0', 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uniq_username` (`username`), 
    UNIQUE KEY `uniq_email` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

CREATE TABLE IF NOT EXISTS `promouter` (
    `userid` int(10) unsigned NOT NULL, 
    `balance` float NOT NULL, 
    `commision` float NOT NULL, 
    `mountly_fee` float NOT NULL, 
    `verified` tinyint(1) NOT NULL DEFAULT '0', 
    KEY `promouter_ibfk_1` (`userid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


ALTER TABLE `front_end_users` 
    ADD CONSTRAINT `front_end_users_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `users` (`id`) ON DELETE CASCADE; 

ALTER TABLE `promouter` 
    ADD CONSTRAINT `promouter_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `front_end_users` (`userid`) ON DELETE CASCADE; 

users->front_end_users->promouter 

我想,如果我創建promouter與登錄名,密碼和地址不是自動插入的用戶(login, password),front_end_users (addr1, addr2, userid)和promouter (userid)相應的字段。

而我有幾個角色。所以我不能添加have_one到用戶模型。但我向front_end_users和promouter模型添加了have_one。

回答

0

如果你想觸發子項創建父創作話,我認爲你應該使用在數據庫級觸發器(一個或多個)。

編輯:

下面的方案創建一個表:

Rules(ID, TableName, ColumnName, Event, Action, Parameters) 

您將有一組規則,然後你就可以做一般性的實現這一點。在您的業務層中,您將調用您的規則解析器(也必須由您執行),這樣您可以在業務層中創建任何邏輯觸發器。我希望這有幫助。

+0

表示存儲一個類,使該字段與其他表相關。而不僅僅是一個觸發器的空白表。 – Peinguin

+0

我編輯了我的答案。 –