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

 

 

 

 

 

 

 

 

 

 

 

 

 

———— 占位符

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM