首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 PHP语言发展历史及其适合的应用领域
1.2 什么是框架
1.3 为什么要用框架开发
1.4 自定义框架
1.4.1 MVC框架模式的实现
1.4.2 入口文件
1.4.3 应用(前端控制器)
1.4.4 从自定义框架到Yii2框架
2.1 Yii简介
2.1.1 什么是Yii框架技术
2.1.2 Yii2的优点
2.1.3 应用案例
2.2 下载Yii2
2.3 运行应用
2.4 输出“Hello World”
2.5 入口文件
2.6 应用主体
2.7 MVC框架模式
2.8 Yii2框架中的控制器
2.9 Yii2框架中的视图
2.10 项目实现迭代一:渲染首页、列表页和内容页视图
3.1 布局概述
3.2 项目实现迭代二:创建并使用布局渲染首页视图
3.3 Controller类的render()方法执行流程
3.4 应用级布局
3.5 嵌套布局
3.6 项目实现迭代三:使用嵌套布局渲染“新闻中心”列表页
3.7 视图文件的存储路径
4.1 模块概述
4.2 使用Gii创建模块
4.3 模块中的资源文件
4.4 项目实现迭代四:文章管理
5.1 ActiveRecord模型概述
5.2 通过CRUD(增查改删)操作理解ActiveRecord类
5.2.1 文章表(ds_article)
5.2.2 在配置文件中初始化数据库连接
5.2.3 创建ActiveRecord模型
5.2.4 通过查询操作理解ActiveRecord类
5.2.5 通过插入和更新操作理解ActiveRecord类
5.2.6 通过删除操作理解ActiveRecord类
5.3 项目实现迭代五:首页“行业百科”数据查询
5.4 项目实现迭代六:在“文章添加”页面实现数据插入
6.1 ActiveRecord模型类的find()方法与查询执行流程
6.2 查询方法find()实例
6.2.1 实现带有逻辑运算符和比较运算符的查询
6.2.2 实现范围比较查询
6.2.3 实现模糊查询
6.3 查询构建类ActiveQuery
6.3.1 ActiveQuery成员属性简介
6.3.2 ActiveQuery成员方法简介
6.3.3 Query类where()成员方法简介
6.4 关联查询
6.5 项目实现迭代七:完成首页中的数据填充
6.5.1 实现幻灯片切换
6.5.2 实现成功案例
6.5.3 实现其他栏目的文章内容查询
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(上)
小册名称:Yii2框架从入门到精通(上)
### 5.2.1 文章表(ds_article) 在Yii2框架的应用开发中,数据库设计是构建稳定、可扩展应用程序的基础。文章表(`ds_article`)作为内容管理系统(CMS)或博客平台的核心组成部分,其设计直接关系到内容的存储、检索、展示及管理的效率与灵活性。本章将深入解析`ds_article`表的设计思路、字段选择、索引优化以及如何在Yii2框架中通过模型(Model)、视图(View)和控制器(Controller)来操作这些数据。 #### 5.2.1.1 设计思路 在设计`ds_article`表之前,首先需要明确文章系统的基本需求,包括但不限于:文章的基本信息(如标题、内容)、作者信息、发布时间、分类归属、状态标识(如是否发布、是否置顶)、评论数、阅读量等。此外,还需考虑未来的扩展性,如是否支持多语言、多标签、自定义字段等功能。 基于这些需求,我们可以将`ds_article`表设计为一个包含丰富信息且易于维护的数据库表。设计时应遵循数据库设计的三大范式,以减少数据冗余,提高数据一致性。 #### 5.2.1.2 字段定义 以下是`ds_article`表的一个基本字段定义示例,根据实际需求可适当调整: ```sql CREATE TABLE `ds_article` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '文章ID,主键', `title` VARCHAR(255) NOT NULL COMMENT '文章标题', `content` TEXT NOT NULL COMMENT '文章内容', `author_id` INT(11) NOT NULL COMMENT '作者ID,外键关联用户表', `category_id` INT(11) NOT NULL COMMENT '分类ID,外键关联分类表', `publish_time` DATETIME NOT NULL COMMENT '发布时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `status` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '状态:0-未发布,1-已发布,2-置顶', `comment_count` INT(11) NOT NULL DEFAULT '0' COMMENT '评论数', `view_count` INT(11) NOT NULL DEFAULT '0' COMMENT '阅读量', `is_delete` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '是否删除:0-未删除,1-已删除', `meta_keywords` VARCHAR(255) DEFAULT NULL COMMENT 'SEO关键词', `meta_description` VARCHAR(500) DEFAULT NULL COMMENT 'SEO描述', PRIMARY KEY (`id`), KEY `idx_author_id` (`author_id`), KEY `idx_category_id` (`category_id`), KEY `idx_publish_time` (`publish_time`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表'; ``` #### 5.2.1.3 字段解析 - **id**:文章的唯一标识符,主键,自增。 - **title**:文章标题,通常用于显示和搜索。 - **content**:文章内容,使用TEXT类型以存储较长的文本。 - **author_id**:作者ID,与用户表(如`ds_user`)关联,表示文章的作者。 - **category_id**:分类ID,与分类表(如`ds_category`)关联,表示文章所属的分类。 - **publish_time**:发布时间,记录文章的发布日期和时间。 - **update_time**:更新时间,自动记录每次文章内容更新的时间。 - **status**:文章状态,用于控制文章的可见性,如是否发布、是否置顶等。 - **comment_count**、**view_count**:分别记录文章的评论数和阅读量,这两个字段可通过事件或触发器自动更新。 - **is_delete**:逻辑删除标志,用于标记文章是否被删除,而不实际从数据库中移除记录,便于恢复或保留数据完整性。 - **meta_keywords**、**meta_description**:SEO相关字段,用于优化搜索引擎对文章内容的识别和展示。 #### 5.2.1.4 索引优化 在上述表结构中,已经为`author_id`、`category_id`、`publish_time`和`status`字段创建了索引。这些索引的选择基于查询优化的考虑: - **author_id**、**category_id**索引:加快根据作者或分类查询文章的速度。 - **publish_time**索引:支持按时间排序查询文章,如获取最新文章列表。 - **status**索引:当需要快速筛选出已发布或置顶的文章时,此索引能显著提高查询效率。 #### 5.2.1.5 Yii2框架中的操作 在Yii2框架中,操作`ds_article`表通常涉及模型(Model)、视图(View)和控制器(Controller)的协作。 - **模型(Model)**:定义与`ds_article`表对应的类,如`Article`。该类继承自`yii\db\ActiveRecord`,通过`$tableName`属性指定对应的数据库表名,并定义CRUD(增删改查)操作的方法。 - **视图(View)**:负责展示文章数据。可以是HTML模板,用于显示文章列表、详情等。视图通过控制器传递的数据来渲染页面。 - **控制器(Controller)**:处理用户请求,调用模型中的方法执行数据操作,并将结果传递给视图进行展示。例如,`ArticleController`可能包含`index`(列出文章)、`view`(查看文章详情)、`create`(创建新文章)、`update`(更新文章)和`delete`(逻辑删除文章)等动作。 #### 5.2.1.6 示例代码片段 以下是基于Yii2框架的`Article`模型(Model)的简单示例: ```php namespace app\models; use Yii; use yii\db\ActiveRecord; class Article extends ActiveRecord { public static function tableName() { return '{{%ds_article}}'; } // 定义关联关系,如与作者表关联 public function getAuthor() { return $this->hasOne(User::className(), ['id' => 'author_id']); } // 定义其他方法,如验证规则、行为等 } ``` 在控制器中,你可以通过调用`Article`模型的方法来实现对`ds_article`表的操作,如: ```php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\Article; class ArticleController extends Controller { public function actionIndex() { $articles = Article::find()->where(['status' => 1])->orderBy(['publish_time' => SORT_DESC])->all(); return $this->render('index', ['articles' => $articles]); } // 其他动作... } ``` 通过以上内容,我们详细解析了`ds_article`表的设计思路、字段定义、索引优化以及在Yii2框架中的操作方式。这为后续章节中进一步探讨Yii2框架的高级特性和最佳实践奠定了坚实的基础。
上一篇:
5.2 通过CRUD(增查改删)操作理解ActiveRecord类
下一篇:
5.2.2 在配置文件中初始化数据库连接
该分类下的相关小册推荐:
PHP8入门与项目实战(1)
PHP底层原理及源码分析
Yii2框架从入门到精通(中)
Laravel(10.x)从入门到精通(六)
PHP合辑2-高级进阶
Magento零基础到架构师(内容设计)
Laravel(10.x)从入门到精通(十九)
PHP合辑5-SPL标准库
PHP8入门与项目实战(4)
Shopify应用实战开发
PHP程序员面试笔试真题与解析
PHP8入门与项目实战(3)