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

users 、 front_end_users 、および promouterpromouterに適切なフィールドを自動的に挿入するよりも、ログイン、パスワード、およびアドレスを使用して作成する必要があります。(login, password)(addr1, addr2, userid)(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 に答える