參考: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 容器會去找到 mysql。 4、但是,如果配置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
———— 占位符
