在MySQL中设置外键,通过Gii创建Model时将自动生成hasMany和hasOne [ 2.0 版本 ]
mxq_user表结构
CREATE TABLE `mxq_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户名',
  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT '认证key',
  `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '密码',
  `password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '密码重置令牌',
  `mobile` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '电子邮件',
  `status` smallint(6) NOT NULL DEFAULT '10' COMMENT '用户状态',
  `created_at` int(11) NOT NULL COMMENT '创建时间',
  `updated_at` int(11) NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户表';
mxq_user_token表结构
CREATE TABLE `mxq_user_token` (
  `token_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '令牌编号',
  `client_type` varchar(10) NOT NULL COMMENT '客户端类型 android wap',
  `user_id` int(11) NOT NULL COMMENT '用户编号',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `access_token` varchar(50) NOT NULL COMMENT '登录令牌',
  `access_expire` int(10) unsigned NOT NULL COMMENT '登录时间',
  `login_time` int(11) DEFAULT NULL COMMENT '最后登陆时间',
  `login_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '最后登陆ip',
  PRIMARY KEY (`token_id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `mxq_user_token_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `mxq_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8 COMMENT='移动端登录令牌表';
CONSTRAINT
mxq_user_token_ibfk_1FOREIGN KEY (user_id) REFERENCESmxq_user(id) ON DELETE CASCADE ON UPDATE CASCADE`
此句就的作用就是当mxq_user中的记录删除时mxq_user_token表对应的关联记录也级联删除,更新时也更新
创建好外键后可以通过Gii工具生成Model
在User模型中自动生成如下代码
    public function getUserTokens()
    {
        return $this->hasMany(UserToken::className(), ['user_id' => 'id']);
    }
在UserToken模型中生成如下代码
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }
hasMany和hasOne的用法请参考文档
qq3737002 河南郑州
            注册时间:2015-03-29
最后登录:2022-07-04
在线时长:59小时26分
    最后登录:2022-07-04
在线时长:59小时26分
- 粉丝31
 - 金钱4498
 - 威望170
 - 积分6788
 
共 0 条评论