📜  Laravel 迁移新鲜和种子 - PHP (1)

📅  最后修改于: 2023-12-03 15:32:36.579000             🧑  作者: Mango

Laravel 迁移新鲜和种子 - PHP

Laravel 的迁移功能非常实用,可以方便地创建数据库表和修改表结构。同时,种子数据也是 Laravel 数据库迁移的一个重要功能,可以方便地生成测试数据或者初始数据。

Laravel 迁移

Laravel 迁移使用 PHP 代码来定义数据库表结构,每个迁移文件代表一个数据库变更操作。迁移文件存储在 database/migrations 目录中,文件名一般以 timestamp_create_table_name.php 的形式命名。

首先,需要创建一个迁移文件,通过 artisan 命令创建一个迁移文件:

php artisan make:migration create_users_table --create=users

上述命令会在 database/migrations 目录下创建一个新的迁移文件 yyyy_mm_dd_hhmmss_create_users_table.php,其中 yyyy_mm_dd_hhmmss 是当前时间戳。

然后,打开迁移文件,使用 up() 方法定义要添加或修改的表结构:

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

此处创建了一个 users 表,包括 idnameemailemail_verified_atpasswordremember_tokentimestamps 字段。

最后,执行迁移命令即可进行迁移操作:

php artisan migrate

该命令会执行所有未执行的迁移文件,对数据库进行相应的变更操作。

Laravel 种子

Laravel 种子是用于数据库初始数据填充的一种方法。Laravel 的种子文件存储在 database/seeds 目录下,默认已经创建了 DatabaseSeeder.php 文件,在该文件中可以定义所需要填充的数据表和条目。

首先,需要创建一个种子文件,通过 artisan 命令创建一个种子文件:

php artisan make:seed UsersTableSeeder

上述命令会在 database/seeds 目录下创建一个新的种子文件 UsersTableSeeder.php

然后,在该种子文件中使用 run() 方法来填充数据:

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => bcrypt('password'),
        ]);
    }
}

以上方法会向 users 表中添加一个随机生成的用户名、邮箱和密码。

最后,在 DatabaseSeeder.php 中的 run() 方法中调用该种子文件的 run() 方法:

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

最后,使用 artisan 命令执行种子任务:

php artisan db:seed

该命令会运行所有 DatabaseSeeder.php 中定义的种子任务,并将数据插入到数据库中。

注意:当执行 db:seed 命令时,系统不会去判断那些表已经被填充过数据了,所以如果一个表已经被填充过数据,而你的种子又向该表中插入数据,那么这些数据将会被重复插入到数据库中。