首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
7.1 调用小部件的两种方式
7.1.1 调用widget()方法使用小部件DatePicker
7.1.2 调用begin()和end()方法使用小部件ActiveForm
7.2 项目实现迭代八:使用ActiveForm小部件替换添加文章视图
7.2.1 调用小部件ActiveForm
7.2.2 “文章标题”文本输入框
7.2.3 “文章栏目”下拉列表框
7.2.4 “文章图片”上传文件输入框
7.2.5 “内容”文本输入域
7.3 自定义小部件
7.3.1 继承Widget
7.3.2 自定义小部件的MVC结构
7.4 项目实现迭代九:自定义首页幻灯片小部件
7.5 项目实现迭代十:分页显示列表页
7.5.1 分页组件Pagination
7.5.2 新闻中心列表页实现数据填充
7.5.3 分页的超链接列表小部件LinkPager
8.1 初识资源包类
8.2 Yii2框架资源管理代码分析
8.2.1 视图中注册资源包类
8.2.2 注册资源文件
8.2.3 输出缓冲区的数据
8.3 AssetBundle类的成员属性
8.4 项目实现迭代十一:本书配套项目实现前端资源管理
8.4.1 实现首页前端资源管理
8.4.2 实现新闻中心列表页前端资源管理
9.1 模型中编写验证规则
9.2 控制器中安全赋值
9.3 控制器中触发验证
9.4 视图中提取错误信息
9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证
10.1 AJAX简介
10.2 传统的JavaScript实现AJAX验证
10.2.1 创建AJAX引擎XMLHttpRequest对象
10.2.2 创建HTTP请求
10.2.3 设置响应HTTP请求状态变化的方法
10.2.4 设置获取服务器返回数据的语句
10.2.5 发送HTTP请求
10.3 jQuery实现AJAX验证
10.4 项目实现迭代十三:完成“添加用户”页面的AJAX验证
11.1 用户登录-表单模型
11.2 用户登录-客户端验证
11.2.1 ActiveForm实现客户端验证代码分析
11.2.2 项目实现迭代十四:完成登录页面的客户端验证
11.3 模型中的自定义方法作为rules()验证器
11.4 用于验证用户名和密码的身份类UserIdentity
11.5 项目实现迭代十五:完成用户登录
11.6 保存用户登录状态的yii\web\User类
12.1 访问控制技术综述
12.2 RBAC简介
12.3 RBAC需求分析及功能概述
12.4 项目实现迭代十六:最简方式实现RBAC
12.4.1 数据库设计
12.4.2 用户管理
12.4.3 角色管理
12.4.4 权限管理
12.4.5 用户—角色配置管理
12.4.6 角色—权限配置管理
12.5 项目实现迭代十七:使用yii\rbac\DbManager实现 RBAC
12.5.1 基本概念
12.5.2 用户管理
12.5.3 角色管理
12.5.4 权限管理
12.5.5 权限管理系统验证
12.6 项目实现迭代十八:使用yii2-admin扩展实现RBAC
12.6.1 配置
12.6.2 使用的数据库表
12.6.3 路由列表
12.6.4 角色列表
12.6.5 用户列表
12.6.6 菜单列表
12.6.7 集成AdminLTE后台主题及菜单展示
12.6.8 基于存取控制过滤器(ACF)的用户登录页面
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(中)
小册名称:Yii2框架从入门到精通(中)
### 12.6.2 使用的数据库表 在Yii2框架的开发过程中,数据库表的设计是构建稳固、可扩展应用的基础。本章节将深入探讨在Yii2项目中如何设计、创建以及管理数据库表,确保它们既满足业务需求,又能高效地被Yii2框架的ORM(对象关系映射)系统——Active Record所利用。我们将从数据库表设计的基本原则讲起,逐步深入到具体表结构的设计、创建表的SQL语句编写,以及如何在Yii2中通过迁移(Migration)机制来管理数据库表的生命周期。 #### 1. 数据库表设计原则 在着手设计数据库表之前,了解并遵循一些基本原则是非常重要的,这些原则有助于提升数据库的性能、可维护性和可扩展性。 - **规范化**:通过减少数据冗余来提高数据的一致性和完整性。通常遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等规范化标准。 - **索引优化**:为频繁查询的列添加索引可以显著提高查询速度,但过多的索引会减慢写操作的速度并增加存储空间的需求。 - **表关联**:合理设计表之间的关联关系,如一对一、一对多、多对多等,以反映业务逻辑中的实体关系。 - **命名规范**:使用清晰、一致的命名规则,便于团队成员理解和维护。 - **安全性**:考虑数据加密、访问控制等安全措施,保护敏感数据不被非法访问。 #### 2. 示例数据库表设计 假设我们正在开发一个基于Yii2框架的博客系统,以下是一些核心数据库表的设计概述: ##### 2.1 用户表(`users`) 用户表用于存储系统用户的基本信息。 ```sql CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(255) NOT NULL UNIQUE, `email` VARCHAR(255) NOT NULL UNIQUE, `auth_key` VARCHAR(32) NOT NULL, `password_hash` VARCHAR(255) NOT NULL, `status` SMALLINT NOT NULL DEFAULT 10, -- 用户状态,如10为激活 `created_at` INT NOT NULL, `updated_at` INT NOT NULL, PRIMARY KEY (`id`), INDEX `idx_username` (`username`), INDEX `idx_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` ##### 2.2 文章表(`posts`) 文章表用于存储博客文章的内容。 ```sql CREATE TABLE `posts` ( `id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, `user_id` INT NOT NULL, `status` TINYINT NOT NULL DEFAULT 1, -- 文章状态,如1为发布 `created_at` INT NOT NULL, `updated_at` INT NOT NULL, PRIMARY KEY (`id`), INDEX `idx_user_id` (`user_id`), FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` ##### 2.3 评论表(`comments`) 评论表用于存储用户对文章的评论。 ```sql CREATE TABLE `comments` ( `id` INT NOT NULL AUTO_INCREMENT, `post_id` INT NOT NULL, `user_id` INT NOT NULL, `content` TEXT NOT NULL, `status` TINYINT NOT NULL DEFAULT 1, -- 评论状态,如1为审核通过 `created_at` INT NOT NULL, PRIMARY KEY (`id`), INDEX `idx_post_id` (`post_id`), INDEX `idx_user_id` (`user_id`), FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON DELETE CASCADE, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` #### 3. 使用Yii2迁移管理数据库表 Yii2框架通过迁移(Migration)机制提供了一种高效管理数据库结构变化的方法。迁移文件通常包含用于创建、修改或删除数据库表的SQL语句,它们被设计为可重复执行的,使得数据库结构可以轻松地从一个开发环境迁移到另一个环境,包括生产环境。 ##### 3.1 创建迁移文件 你可以通过Yii2的控制台命令来创建迁移文件。例如,要创建一个用于创建`users`表的迁移,可以运行: ```bash ./yii migrate/create create_users_table ``` 这将在`@app/migrations`目录下生成一个新的迁移文件,你需要在这个文件中编写创建`users`表的SQL语句,但通常我们会使用Yii2的迁移API来构建表结构,因为这样做更加灵活且易于维护。 ##### 3.2 编写迁移代码 在迁移文件中,你可以使用Yii2的`$this->createTable()`方法来定义表结构,如下所示: ```php <?php use yii\db\Migration; /** * Handles the creation of table `{{%users}}`. */ class mXXX_XXX_create_users_table extends Migration { /** * {@inheritdoc} */ public function safeUp() { $this->createTable('{{%users}}', [ 'id' => $this->primaryKey(), 'username' => $this->string(255)->notNull()->unique(), 'email' => $this->string(255)->notNull()->unique(), 'auth_key' => $this->string(32)->notNull(), 'password_hash' => $this->string(255)->notNull(), 'status' => $this->smallInteger()->notNull()->defaultValue(10), 'created_at' => $this->integer()->notNull(), 'updated_at' => $this->integer()->notNull(), ]); // 这里可以添加更多表结构定义或索引 } /** * {@inheritdoc} */ public function safeDown() { $this->dropTable('{{%users}}'); } } ``` ##### 3.3 应用迁移 编写完迁移文件后,你可以通过Yii2的控制台命令来应用这些迁移,从而更新数据库结构。要应用所有新的迁移,可以运行: ```bash ./yii migrate ``` 这将会执行所有尚未应用的迁移,包括你刚刚创建的`create_users_table`迁移,从而在数据库中创建`users`表。 #### 4. 结论 数据库表的设计是Yii2应用开发中的关键环节,它不仅影响应用的性能和可扩展性,还直接关系到应用的数据完整性和安全性。通过遵循数据库设计的基本原则,结合Yii2框架提供的强大ORM和迁移机制,我们可以构建出既健壮又易于维护的数据库结构。在本章节中,我们详细介绍了数据库表设计的基本原则、示例表结构设计、以及如何在Yii2中通过迁移机制来管理数据库表的生命周期。希望这些内容能为你的Yii2框架应用开发之路提供有力的支持。
上一篇:
12.6.1 配置
下一篇:
12.6.3 路由列表
该分类下的相关小册推荐:
Magento零基础到架构师(产品管理)
PHP高性能框架-Swoole
Laravel(10.x)从入门到精通(八)
Laravel(10.x)从入门到精通(四)
PHP8入门与项目实战(5)
PHP8入门与项目实战(1)
Laravel(10.x)从入门到精通(十六)
PHP程序员面试算法宝典
Laravel(10.x)从入门到精通(一)
Workerman高性能Web框架-Webman
ThinkPHP项目开发实战
PHP8入门与项目实战(4)