为什么添加字段要新增迁移文件?直接在 create_users_table 里面加字段不行吗?

如果我要添加 users 表的字段是不是可以直接在 database/migrations/2014_10_12_000000_create_users_table.php 里修改不用去新建迁移文件?

.
.
.
 public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
.
.
.
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

新建迁移文件可以控制数据库的版本,直接在同一个迁移文件上不断修改,这个迁移文件就失去了意义,为什么不直接操作数据库?

5年前 评论
讨论数量: 7
Jennie

可以的,试一下就知道了。我们一般不建议这样做,因为执行 migrate 不会生效的。除非执行 migrate:refresh 这样的话可以新增上去,但是表中已存在的数据就会不见了的。所以,基本操作就是,加字段什么的都是新增迁移文件咯。

5年前 评论

新建迁移文件可以控制数据库的版本,直接在同一个迁移文件上不断修改,这个迁移文件就失去了意义,为什么不直接操作数据库?

5年前 评论

@doderic 以前没用过这个迁移功能,多谢解答

5年前 评论

@xiayin 多看文档,你就会明白很多地方为什么会这样设计了,比如 数据库迁移

5年前 评论

@doderic 现在感觉看不懂文档,也不知道 Laravel 是怎么工作的,看那个容器和依赖注入也是很懵啊,只有先跟着教程敲后面再去理解了。

5年前 评论

@xiayin 慢慢来,一点一点积累

5年前 评论

Laravel 的 migration 功能对数据库修改有一个版本管理机制。

  1. 当运行 php artisan migrate 后,Laravel 除了执行 /database/migrations/文件外,还会在数据库的表 migrations 添加已执行的文件名。而在 migrations 表新增的文件名在默认情况下是不会再次执行的。
  2. migration 的维护机制是希望用户以版本迭代的形式对数据库进行修改。用户根据实际情况对数据库部分操作做回滚等处理。
  3. 根据你现在的案例,users 对应的创建文件已在 migrations 表内,Laravel 会认为文件已执行而忽略你在这个文件上做的改动。
  4. 解决方案: php artisan migrate:refresh ,代价是所有表数据丢失。
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!