📅  最后修改于: 2023-12-03 15:32:36.579000             🧑  作者: Mango
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
表,包括 id
、name
、email
、email_verified_at
、password
、remember_token
和 timestamps
字段。
最后,执行迁移命令即可进行迁移操作:
php artisan migrate
该命令会执行所有未执行的迁移文件,对数据库进行相应的变更操作。
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
命令时,系统不会去判断那些表已经被填充过数据了,所以如果一个表已经被填充过数据,而你的种子又向该表中插入数据,那么这些数据将会被重复插入到数据库中。