## 為什么要使用數據填充
在開發階段,我們常常需要使用假數據對應用進行測試. laravel 提供了factory工廠方法來生成假數據.
使用命令創建數據工廠類.
~~~
php artisan make:factory UserFactory
~~~
上面的命令在database/factories文件夾下創建了一個工廠類.
以下,我們創建了一個文章工廠.define()方法接收兩個參數,第一個參數是關聯的模型,第二個參數是一個閉包. 然后對響應的字段指定合適的數據類型.
~~~
<?php
use Faker\Generator as Faker;
$factory->define(\App\Post::class, function(Faker $faker){
$user_ids = \App\User::pluck('id')->toArray();
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
'user_id' => $faker->randomElement($user_ids),
];
});
~~~
## 通過tinker生成數據
然后通過命令進入tinker
~~~
php artisan tinker
~~~
~~~
factory(\App\Post::class,50)->create()
~~~
就可以生成50條假數據了
## 通過seeder生成數據
在命令行輸入
~~~
php artisan make:seeder PostTableSeeder
~~~
該命令會在database/sedds文件夾下創建PostTableSeeder類
~~~
<?php
use Illuminate\Database\Seeder;
class PostTableSeeder extends Seeder
{
public function run()
{
factory(\App\Post::class)->times(50)->create(); //times()方法指定生成的數據條數,create()方法用來創建數據.
}
}
~~~
然后在database/seeds/文件夾的DatabaseSeeder類的run()方法中調用$this->call()方法
~~~
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
Model::unguard();
$this->call(PostTableSeeder::class);
Model::unguard();
}
}
~~~
完成以上操作后在命令行運行即可生成假數據.
~~~
php artisan db:seed
~~~