必须执行 php yii migrate,因为 yii2 高级模板不自带数据库表,依赖迁移文件创建 user、auth_*、session 等核心表,缺失则导致注册登录鉴权失败;执行前需确保 mysql 运行、数据库已创建且配置正确。

安装 Yii2 高级模板后,必须执行 php yii migrate 这条命令,否则数据库中缺少基础表(如 user、session、auth_assignment 等),应用将无法正常注册、登录、鉴权,甚至访问首页都会报错。
为什么迁移是强制步骤?
Yii2 高级模板本身不自带已建好的数据库表。它把表结构定义封装在预置的迁移文件里(位于 console/migrations/ 目录),例如:
-
m130524_201442_init.php:创建user表(含 id、username、email、password_hash 等字段) -
m140506_102106_rbac_init.php:初始化 RBAC 权限系统所需的 4 张表(auth_rule、auth_item、auth_item_child、auth_assignment) - 部分版本还包含
session表迁移,用于数据库存储 session 数据
这些迁移不是可选功能,而是框架运行依赖的底层数据结构。跳过迁移 = 没有用户表 → 无法登录;没有 auth 表 → 后台权限系统直接失效。
执行迁移前的关键准备
迁移命令能否成功,取决于三个前提是否就绪:
-
MySQL 服务已启动:确认
mysqld正在运行(如 WAMP/XAMPP 绿色图标亮起) -
数据库已手动创建:不能只配好连接参数就跑迁移——需先用 phpMyAdmin 或命令行执行
CREATE DATABASE `your_db_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
数据库配置正确:检查
common/config/main-local.php中'db'组件的dsn、username、password是否与实际一致,特别注意dbname拼写和大小写(Linux 环境敏感)
标准迁移操作流程
在项目根目录(即含 yii 可执行脚本的目录)下依次执行:
-
php yii migrate—— 执行所有未应用的迁移(首次运行会提示创建migration历史表) - 看到
Apply the above migration?提示时,输入yes确认(Windows 下若用 PowerShell,命令为.\yii migrate) - 成功后输出类似:
Migrated up successfully.和各表创建日志(如> create table {{%user}} done)
如果中途失败,常见原因包括:MySQL 用户无建表权限、数据库名不存在、字符集不支持(建议统一用 utf8mb4)、或已有同名表但结构不匹配(此时可加 --interactive=0 跳过确认,或先清空 migration 表再重试)。
后续维护中的迁移使用
项目开发中新增表或字段,应通过命令生成新迁移文件,而非直接改库:
-
php yii migrate/create add_status_to_post→ 自动生成mYYMMDD_HHIISS_add_status_to_post.php - 编辑该文件的
up()方法添加$this->addColumn('post', 'status', $this->smallInteger()) - 再次运行
php yii migrate即可上线变更
这种机制保证了多环境(开发/测试/生产)数据库结构一致,也便于回滚(php yii migrate/down 1 可撤回最近一次迁移)。











