Laravel migration 的使用

参考:https://laravel-china.org/docs/laravel/5.7/migrations/2291

 

// 生成迁移文件:

// 1、新建
php artisan make:migration create_users_table --create=users
// 2、修改表
php artisan make:migration alter_users_table --table=users

 

// 例子:

1、创建一个 admin_user 的表:

php artisan make:migration create_admin_user_table --create=admin_user

会在 database/migration 下生成一个 PHP 文件: 2018_12_25_073837_create_admin_user_table.php。

其内容如下:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAdminUserTable extends Migration
{
    public function up()
    {
        Schema::create('admin_user', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }
  
    public function down()
    {
        Schema::dropIfExists('admin_user');
    }
}

2、执行迁移:

php artisan migrate      // 可以加入 --force,表示强制迁移。

 

 

// 回滚迁移:

// 回滚最后一次迁移
php artisan migrate:rollback 

// 回滚到最近5次迁移
php artisan migrate:rollback --step=5

// 回滚程序中的所有迁移
php artisan migrate:reset

// 回滚所有迁移并重新构建整个数据库
php artisan migrate:refresh

// 刷新数据库结构并执行数据填充
php artisan migrate:refresh --seed

// 回滚并重新执行最后五次迁移
php artisan migrate:refresh --step=5

// 删除数据库所有表格并执行migrate
php artisan migrate:fresh 
php artisan migrate:fresh --seed

 

 

—————— 修改表名的例子 ——————

创建迁移文件

php artisan make:migration rename_admin_user_to_admin_users --table=admin_user

修改迁移文件内容。

// 在 up 方法中写我们要重命名表的逻辑。
public function up()
{
    Schema::table('admin_user', function (Blueprint $table) {
        Schema::rename('admin_user','admin_users');
    });
}

// 为了可以 rollback 可以顺利执行,我们还需要在 down 方法中编写撤销重命名操作的逻辑
public function up()
{
    Schema::table('admin_user', function (Blueprint $table) {
        //
        Schema::rename('admin_users','admin_user');
    });
}

 执行迁移:

docker-compose exec phpfpm /Users/linfeng/docker/data/www/laravel/artisan migrate

 

 

 

 

—————— 数据填充Seeder ——————

1、准备填充 user 表,所以执行以下命令,生成 Seeder 文件,

php artisan make:seeder AdminUserTableSeeder

—— 会在/database/seeds/ 生成AdminUserTableSeeder.php 文件。

2、打开 seeder 文件,并在在 run 方法里面添加:

public function run()
{
    // 添加测试数据
    DB::table('admin_users')->insert([
        'name' => str_random(10),
        'email' => str_random(10).'@gmail.com',
    ]);
}

3、执行填充:

php artisan db:seed --class=AdminUserTableSeeder

—— 最后:这个感觉没什么用,自己在任何控制器里面都能去做这个循环插入模拟数据。

 

  

// 数据库:

// 重命名
Schema::rename($from, $to);

// 删除数据表
Schema::drop('users');
Schema::dropIfExists('users');

// 创建字段
Schema::table('users', function (Blueprint $table) {
    $table->string('email');
});

 

// 更改字段属性:

// 将字段name 的长度改为50
Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

// 将字段改为50并可空
Schema::table('users', function (Blueprint $table) { 
    $table->string('name', 50)->nullable()->change(); 
});

 

//重命名字段

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('name', 'names');
});

 

// 删除字段:

// 删除字段
Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});
// 删除多个字段
Schema::table('users', function (Blueprint $table) { 
    $table->dropColumn(['votes', 'avatar', 'location']); 
});

 

创建索引:

// 字段定义 之后链式调用 unique 方法来创建索引
$table->string('email')->unique();

// 定义完字段之后创建索引
$table->unique('email');

// 将数组传递给索引方法来创建一个复合(或合成)索引
$table->index(['account_id', 'created_at']);

// 传递第二个参数来自定义索引名称
$table->unique('email', 'unique_email');

 

// 重命名索引:

$table->renameIndex('from', 'to')

 

// 删除索引:

// 删除主键索引
$table->dropPrimary('users_id_primary');

// 删除唯一索引
$table->dropUnique('users_email_unique');

 

 

 ———————— Docker 下的使用 ————————

问题:

1、php 容器使用 mysql 这个名字进行连接 mysql
2、我的宿主机也可以使用127.0.0.1:3306连接 mysql 容器
3、我的php配置文件里面配置了DB_HOST=mysql,因为,执行 php 的是 php 容器,所以,php 容器会去找到 mysql4、但是,如果配置DB_HOST=mysql,我的宿主机在执行一些命令,比如文件迁移,他会自动的去找到DB_HOST=mysql,是连接不到的mysql 容器的。因为,宿主机识别127.0.0.1

这时候执行:php artisan migrate,相当于在本地连接 mysql 容器进行。本地识别127.0.0.1,并不识别 mysql。容器之间互联才使用 mysql

 

解决方法一:

docker-compose exec phpfpm /Users/linfeng/docker/data/www/laravel/artisan migrate:rollback

—— 相当于,直接在容器里面执行了 php artisan 命令。

 

解决方法二:修改 host 文件。在 host文件添加一行,把 mysql 指向127.0.0.1即可。

127.0.0.1    mysql

 

 

 

 

 

 

 

 

 

 

 

 

 

———— 占位符

 

posted @ 2018-12-25 16:24  小寒1206  阅读(5397)  评论(0编辑  收藏  举报