laravel 如何实现数据自动填充

以下为用到的迁移文件
Schema::create('users', function (Blueprint $table) {
     $table->increments('id');
     $table->string('name');
     $table->string('email');
     $table->timestamps();
});

Schema::create('logins', function (Blueprint $table) {
     $table->increments('id');
     $table->integer('user_id');
     $table->string('ip_address');
     $table->timestamps();
});
创建数据填充文件 seeder
php artisan make:seeder UsersTableSeeder

编写文件

DB::table('users')->insert(
   [
       [
           'name' => '张三',
           'email' => '10@qq.com',
           'created_at' => Carbon::now(),
           'updated_at' => Carbon::now()
       ],
       [
           'name' => '李四',
           'email' => '11@qq.com',
           'created_at' => Carbon::now(),
           'updated_at' => Carbon::now()
       ]
   ]
);

编写完成后找到 database/seeds/DatabaseSeeder 文件,写入以下代码

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

随后执行命令

php artisan db:seed

生成对应的记录
《laravel 如何实现数据自动填充》

如果要大批量的生成数据,用该方法就显得相对麻烦。此时我们应该使用 model工厂模式 来大量生成数据。

首先创建对应的 model 文件
php artisan make:model Models/User
 
class User extends Model
{
    public $table = "users";
    public $fillable = ['name', 'email'];
}
创建模型工厂,找到 database / factories / UserFactory.php 文件
php artisan make:factory UserFactory

$factory->define(\App\Models\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
    ];
});

其中对于 Faker 详细的使用请查看 传送门

随后修改文件 UsersTableSeeder
public function run()
{
    factory(\App\Models\User::class, 50)->create();
}
最后执行
php artisan db:seed

生成对应的数据
《laravel 如何实现数据自动填充》

优化大批量插入数据

将原先的 create 插入数据改为使用 insert,create() 会对数据库进行多次操作,而 insert() 为一次

public function run()
{
    factory(\App\Models\User::class, 50)->make();
    \App\Models\User::insert($users->toArray());
}
    原文作者:raytol
    原文地址: https://blog.csdn.net/z_ruitao/article/details/97547829
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞