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 容器会去找到 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
———— 占位符
——————————————————————//////——欢迎光临,请多指教!可加QQ:349017128进行交流——//////——————————————————————