laravel 数据库迁移

  • 创建迁移文件
php artisan make:migration create_samples_table --create=samples

--create==samples这个选项表明我们想要建立一个名为samples的数据库表

  • 迁移文件的结构
<?php                
   
use Illuminate\Support\Facades\Schema;                
use Illuminate\Database\Schema\Blueprint;                
use Illuminate\Database\Migrations\Migration;                
   
class CreateSamplesTable extends Migration                
{                
    /**                
     * Run the migrations.                
     *                
     * @return void                
     */                
    public function up()                
    {                
        Schema::create('samples', function (Blueprint $table) {                
            $table->increments('id');                
            $table->timestamps();                
        });                
    }                
   
    /**                
     * Reverse the migrations.                
     *                
     * @return void                
     */                
    public function down()                
    {                
        Schema::dropIfExists('samples');                
    }                
}

我们看到,这个类中有updown两个方法。up中我们需要添加创建数据表的字段。而down方法中我们需要添加在回滚该迁移文件时应该有什么样的结果(这里我们直接删除这张表)。
可以看出,updown中的操作是对应的,在up中进行了什么操作,down中就需要撤销这些操作。
$table->increments('id')将创建一个名为idcolumn,并赋予PRIMARY KEYUNSIGNEDAUTO INCREMENT属性。
$table->timestamps()将创建created_atupdated_at两个column(类型是DATETIME)。

注意:Laravel默认认为每个table都会存在一个id栏目,并且要求每个table都要有created_at和updated_at这两个栏目。

  • 运行迁移文件(生成数据表)
php artisan migrate

注意:如果没有在数据库中看见samples这张表生成,去检查一下.env文件中关于数据库的配置,看是否和自己的数据库的信息对应

  • 新增字段(开发环境)
    如果是在开发阶段数据不重要,可以使用下面的方法
###在迁移文件中up的方法里加上需要新增的字段
table->string('url', 200)->nullable();

然后我们运行

php artisan migrate:refresh --seed

这样就可以发现数据表中新增的字段已经有了,但是数据全部清空了,数据没有的原因,如下:

php artisan migrate:refresh
###等同于
php artisan migrate:reset              
php artisan migrate

上述的方法在本地开发中可以使用,前提是数据不重要,但是在生产环境中,数据不能丢失,上述的方法就不能够使用,下面的方法比较稳妥,不论是开发环境还是生产环境都可以使用,希望大家习惯下面的方法,虽然麻烦一点,但是比较安全,维护起来比较方便

  • 新增字段(生产环境)
###--table选项也可用于确定表的名称
php artisan make:migration add_url_field_to_samples_table --table=samples

我们添加一个url的字段,并且让在name之后

<?php            
   
use Illuminate\Support\Facades\Schema;            
use Illuminate\Database\Schema\Blueprint;            
use Illuminate\Database\Migrations\Migration;            
   
class ModifySamplesTable extends Migration            
{            
    /**            
     * Run the migrations.            
     *            
     * @return void            
     */            
    public function up()            
    {            
        Schema::table('samples', function (Blueprint $table) {            
            $table->string('url', 200)->after('name');     
        });            
    }            
   
    /**            
     * Reverse the migrations.            
     *            
     * @return void            
     */            
    public function down()            
    {            
        Schema::table('samples', function (Blueprint $table) {            
            $table->dropColumn('url');   ###down方法一定要和up方法对应,up中创建url,down中就应该删除url       
        });            
    }            
}

运行迁移

php artisan migrate
  • 修改字段(正式环境)
    把name这个栏目长度限制从100修改为50

新建一个迁移文件

php artisan make:migration modify_name_column_in_samples_table --table=samples

在文件中添加$table->string('name', 50)->change();如下:

<?php            
   
use Illuminate\Support\Facades\Schema;            
use Illuminate\Database\Schema\Blueprint;            
use Illuminate\Database\Migrations\Migration;            
   
class ModifyNameColumnInSamplesTable extends Migration            
{            
    /**            
     * Run the migrations.            
     *            
     * @return void            
     */            
    public function up()            
    {            
        Schema::table('samples', function (Blueprint $table) {            
            $table->string('name', 50)->change();              
        });            
    }            
   
    /**            
     * Reverse the migrations.            
     *            
     * @return void            
     */            
    public function down()            
    {            
        Schema::table('samples', function (Blueprint $table) {            
            $table->string('name', 100)->change();            
        });            
    }            
}

注意:up和down一定要对应才可以
运行迁移

php artisan migrate

补充:如果想更改字段的类型,可以使用下面的语法,结合上面的操作

table->text('name')->change();
###修改完运行迁移就能看到改变了

ishow.bind-time.com Copyright © 2020 小肥青王二狗

添加新评论

生活其实很简单,过了今天就是明天。

低头哭过别忘了抬头继续走。

不要被任何人打乱自的脚步,因为没有谁会像你一样清楚和在乎自己梦想。

没有人可以打倒我,除非我自己先趴下!

你要记住你不是为别人而活,你是为自己而活。