03. Laravel 数据库迁移

数据库迁移-创建用户表

1. 初步设计用户表字段如下

c字段 类型 备注
id int 主键
username varchar 用户名
account varchar 用户账号(唯一标识)
password varchar 加密之后的密码
email varchar 邮箱
mobile varchar 用户手机号
avatar varchar 头像地址
created_at timestamp 创建时间
updated_at timestamp 更新时间

2. 数据库配置

数据库配置文件在 config/database.php, 默认就是 mysql

'mysql' => [
  'driver' => 'mysql',
  'url' => env('DATABASE_URL'),
  'host' => env('DB_HOST', '127.0.0.1'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'forge'),
  'username' => env('DB_USERNAME', 'forge'),
  'password' => env('DB_PASSWORD', ''),
  'unix_socket' => env('DB_SOCKET', ''),
  'charset' => 'utf8mb4',
  'collation' => 'utf8mb4_unicode_ci',
  'prefix' => '',
  'prefix_indexes' => true,
  'strict' => true,
  'engine' => null,
  'options' => extension_loaded('pdo_mysql') ? array_filter([
    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
  ]) : [],
],

可以看出优先读取的是 .env 文件的配置, 这里之前已配置好。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=genes_admin
DB_USERNAME=root
DB_PASSWORD=123456

charset 和 collation 不是从 .env 文件读取的,可以修改为 utf8mb4 和 utf8mb4_general_ci

然后创建数据库 genes_admin

03. Laravel 数据库迁移_第1张图片

3. 数据库迁移

  1. 生成迁移

    root@d92a8d4c6792:/var/www/ogenes/Genes-Admin# php artisan make:migration create_table_user --create=user
    
       INFO  Created migration [2022_08_24_023209_create_table_user].  
    
    
    
    

    然后会自动创建 database/migrations/2022_08_24_023209_create_table_user.php 文件

  2. 新增默认账户和密码SALT

    # 在.env中加入配置项
    SALT=vW6XRhUGxxxxxxxxxxxxxxxxxxx***uzSnkmDy
    ADMIN=admin
    PASSWD=123
    
    # 然后新建配置文件 config/common.php, 写入:
    <?php
    return [
        'salt' => env('SALT', ''),
        'admin' => [
            'account' => env('ADMIN', 'admin'),
            'passwd' => env('PASSWD', '123456'),
        ]
    ];
    
    
  3. 修改 database/migrations/2022_08_24_023209_create_table_user.php 文件

    
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    return new class extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('user', function (Blueprint $table) {
                $table->increments('id')->comment('主键');
                $table->string('username', 64)->nullable(false)->default('')->comment('用户名');
                $table->string('account', 32)->nullable(false)->default('')->comment('用户账号');
                $table->string('password', 60)->nullable(false)->default('')->comment('密码');
                $table->string('email', 32)->nullable(false)->default('')->comment('邮箱');
                $table->string('mobile', 11)->nullable(false)->default('')->comment('手机号');
                $table->string('avatar', 255)->nullable(false)->default('')->comment('用户头像');
                $table->timestamp('created_at')->default('2000-01-01 00:00:01')->comment('创建时间');
                $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP'))->comment('更新时间');
                $table->engine = 'InnoDB';
                $table->charset = 'utf8mb4';
                $table->collation = 'utf8mb4_general_ci';
                $table->unique(['account']);
                $table->index(['username'], 'idx_username');
                $table->index(['mobile'], 'idx_mobile');
                $table->index(['email'], 'idx_email');
                $table->comment('用户表');
            });
            DB::table('user')->insert([
                'account' => config('common.admin.account', 'admin'),
                'username' => '系统管理员',
                'password' => md5(config('common.salt', '') . config('common.admin.password', '123456')),
                'created_at' => date('Y-m-d H:i:s'),
            ]);
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('user');
        }
    };
    
    
    
  4. 执行迁移

    注意删除 database/migrations/ 下其他的示例文件,保留刚生成的 2022_08_24_023209_create_table_user.php 即可

    root@d92a8d4c6792:/var/www/ogenes/Genes-Admin# php artisan migrate
    
       INFO  Preparing database.  
    
      Creating migration table .............................................................................................................. 158ms DONE
    
       INFO  Running migrations.  
    
      2019_12_14_000001_create_personal_access_tokens_table ................................................................................. 162ms DONE
      2022_08_24_023209_create_table_user ................................................................................................... 423ms DONE
    
    root@d92a8d4c6792:/var/www/ogenes/Genes-Admin# 
    

    查看数据库

    03. Laravel 数据库迁移_第2张图片

    03. Laravel 数据库迁移_第3张图片

    如果想修改 migrations 表名, 在 config/database.php 的 migrations

    'migrations' => 'ga_migrations',
    
  5. 默认会生成 Sanctum 的预设表 personal_access_tokens。可在AppServiceProvider中忽略。

    class AppServiceProvider extends ServiceProvider
    {
        public function register()
        {
            Sanctum::ignoreMigrations();
        }
    }
    

你可能感兴趣的:(数据库,laravel,php)