---
# System prepended metadata

title: laravel seeder and factory
tags: [Laravel]

---

# laravel seeder and factory

https://hackmd.io/@javck/ByJgF8HRP/%2F%40javck%2FSk9yrIf5I


不要用create 
https://learnku.com/laravel/t/2066/the-correct-method-for-filling-large-quantity-of-false-data 

## factory
**此為5.x版本寫法**

```
\\Database\seeders\UserSeeder.php

factory(App\User::class,100)->create();  //建立users表格的假資料，共生成100筆
```
**此為8.x版本寫法**

```
\\Database\seeders\UserSeeder.php

User::factory()->times(100)->create();  //建立users表格的假資料，共生成100筆
```
factory()的最後面可以接create().make()以及raw()

* create() 用Factory生成模型物件的集合後並據此存成資料庫資料
* make() 用Factory生成模型物件的集合
* raw() 用Factory生成資料的陣列





## faker
```
Faker套件
使用Faker來生成假資料

$faker = Faker\Factory::create('zh_TW'); 使用繁中語系
$faker->name 取得名字
$faker->randomDigit 取得0~9的隨機數字
$faker->randomDigitNot(0) 取得1~9的隨機數字
$faker->numberBetween(1,100) 取得1~100的隨機數字
$faker->address 取得地址
$faker->sentence($nbWords =3) 使用3個單字的句子
$faker->text 取得文章
$faker->realText($nbWords = 10) 取得字數為多少的中文內容
$faker->url 取得網址
$faker->imageurl($width = 640 , $height = 480) 取得圖片網址
$faker->unique()->email 取得Email，需為唯一
$faker->optional()->word 取得文字，偶而會得到null
$evenValidator = function($digit){
    return $digit % 2 ==0;
}
$faker->valid($evenValidator)->randomDigit; 取得符合驗證規則的值
```

## 外key
![](https://i.imgur.com/wUWYnYu.png)
還沒試過 可以試看看



## comment 互動

你可以看seeder那邊
有comment的變數

### 指令

call可以調用
info預設是綠色 成功的意思
![](https://i.imgur.com/oZNHHqe.png)
confirm預設是false 所以提示那邊會[no]
可以把confirm第二參數改成true
這樣他按任何鍵都是true了
![](https://i.imgur.com/BgmIPIT.png)


### 指令 要輸入的
ask
![](https://i.imgur.com/fqt1o9B.png)
第一 ask第二參數 是預設
第二 ask出來的是string 所以要轉int


### 防呆
如果他輸入的是0 下面seeder會出錯 
因為最少要一才能執行

使用max() function
它會讓實例最少是一個
我追過去看好像是carbon的輔助涵式
![](https://i.imgur.com/P2OvuOO.png)


###### tags: `Laravel`