在线留言数据填充
上篇我们把在线留言做好了,但是你发现没有,因为数据少,分页看不到,我只是用手工方式添加了两条信息,如果要添加几十上白条甚至上千条,这样添加太笨了!幸好laravel/lumen给我我们提供了数据填充功能。
第一步:在/database/factories/目录下,你会看到一个示例文件ModelFactory.php,我们仿照这个文件名新建一个MessageFactory.php,为什么是MessageFactory呢?因为我们要填充的表是message,对应的模型是Message,所以,要用MessageFactory.php作为我们Message模型的工厂文件,文件内容如下
<?php
$factory->define(\App\Models\Message::class, function (Faker\Generator $faker) {
return [
'title' => $faker->titleMale,
'name' => $faker->userName,
'mobile' => mb_substr($faker->phoneNumber, 0, 10),
'email' => mb_substr($faker->unique()->safeEmail, 0, 30),
'address' => mb_substr($faker->address, 0, 40),
'content' => $faker->text(rand(10,100)),
'state' => rand(0, 1),
'created_at' => $faker->date('Y-m-d H:i:s'),
'updated_at' => $faker->date('Y-m-d H:i:s'),
];
});
$factory->define()的第一个参数是模型的类,我们填充的是Message模型,所以是\App\Models\message::class,第二个参数是一个回调函数,它返回一个数组,数组的key就是我们数据messages数据表中字段,值是有Faker生成的,它可以帮我们生成指定格式的文本,方便我们填充数据。你想呀,如果让你自己随机生成email的值,你是不是要写代码生成?现在Faker帮我们做了,真的是太好了。Faker都能生成哪些格式的数据?需要你自己去探索。
第二步:在/database/seeds/目录下新建一个MessageTableSeeder.php文件。文件名为什么要MessageTableSeeder,这个我不用再解释了吧。TableSeeder是固定的,TableSeeder左边的就是模型名。注意它需要继承Seeder。
<?php
class MessageTableSeeder extends \Illuminate\Database\Seeder
{
public function run()
{
factory(\App\Models\Message::class, 50)->create();
}
}
类里边写一个run()方法,factory()的第一个参数是模型的类,第二是指定要往表中添加多少条数据,create()方法是告诉工厂在数据表中写入数据。
第三步:在终端执行命令
composer dump-autoload //先执行找个命令重新生成 Composer 的自动加载器
php artisan db:seed --class=MessageTableSeeder
填充数据用php artisan db:seed命令,--class是指定Seeder目录下的那个类。你执行下命令,看看数据表中有没有数据?先让你你们看下我的
看看,分页也出来了,我这里是设置的是每页15条。
有同学就问了,那如果要同时填充10表,难道要一个一个命令执行吗?嗯,问得好,问的妙,问的问题呱呱叫!这个larave/lumen已经考虑到了。
打开/database/seeds/DatabaseSeeder.php文件,在run()方法中写入
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call('MessageTableSeeder');
}
}
看$this->call('MessageTableSeeder');中的参数,他就是seeds目录下的文件名。如果想同时把users表也填充数据,新增一行$this->call('UserTableSeeder');前提是已经有了User模型的相关文件。只要把所有你想填充的模型都放到这里,你一个命令,框架就会自动填充这里的所有表。
执行以下命令
php artisan db:seed
注意这里没有指定类,然后再看看messages表中是不是有新的数据。我这里是出现新数据了。
这个框架太好的,我感动的都哭了,今天就到这里吧,我先找点纸巾擦擦泪!