0

我想在创建孩子时自动创建父记录。

例子。

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使用登录名、密码和地址创建而不是自动在 users (login, password)、 front_end_users(addr1, addr2, userid)和 promouter中插入适当的字段,我想要(userid)

我有几个角色。所以我不能将 have_one 添加到用户模型中。但是我将 have_one 添加到 front_end_users 和 promouter 模型中。

4

1 回答 1

0

如果您想在子创建时触发父创建,那么我认为您应该在数据库级别使用触发器。

编辑:

使用以下方案创建一个表:

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

然后,您将拥有一套规则,您将能够为此进行一般实施。在您的业务层中,您将调用您的规则解析器(也必须由您实现),这样您就可以在业务层中进行任何逻辑触发器。我希望这有帮助。

于 2012-05-28T10:18:31.313 回答