Laravel用來生成資料表資料的技術
5.*版的 Laravel會把所有Seeder檔案放在seeds資料夾,8.*版起則更名為seeders
php artisan make:seeder {表格名稱單數}Seeder
php artisan make:model {表格名稱單數}
\\database\seeders\ItemSeeder.php
use App\Models\Item;
public functin run()
{
//清除表格所有資料,並將流水號計數器歸零
Item::truncate();
//建立假資料
Item::create(['欄位名稱'=>'值',...]);
}
//database\seeders\DatabaseSeeder.php
use Illuminate\Support\Facades\DB;
public function run()
{
//關閉外鍵偵測
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
$this->call(ItemSeeder::class);
//開啟外鍵偵測
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
//透過DatabaseSeeder.php
php artisan db:seed
//不透過DatabaseSeeder.php
php artisan db:seed --class={Seeder類別}
//App\Models\Item.php
class Item extends Model{
protected $table = 'titems';
}
當遇到內容無法正常顯示,或者抓不到檔案時請服用
composer dump-autoload
//App\models\Item.php
class Item extends Model{
protected $timestamps = false;
}
rand(最小值,最大值) 生成隨機數
是在PHP裏頭負責處理日期運算的套件,非常強大。
使用前可使用 use \Carbon\Carbon; 來導入
\Carbon\Carbon::setLocale('zh_TW'); 設定Carbon套件的語系
\Carbon\Carbon::now() 使用Carbon套件來生成日期
\Carbon\Carbon::parse($str) 將date字串進行轉換成carbon物件
\Carbon\Carbon::createFromFormat('Y-m-d',$date) 依照參數格式將date字串轉成Carbon物件
Carbon變數->year 取得年份
Carbon變數->month 取得月份
Carbon變數->addDays(8) 將此日期加上8天
Carbon變數->format('Y-m-d')將此日期依照yyyy-mm-dd的方式來呈現
Carbon變數->diffForHumans() 將顯示字串改成口語化表示
如需了解更多的Carbon資訊,可以參考https://kejyuntw.gitbooks.io/laravel-5-learning-notes/package/tool/package-tool-carbon.html
使用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; 取得符合驗證規則的值
PS:如需了解更多的Faker資訊,可以參考Faker Github
Step 1.輸入指令php artisan make:factory {模型類別}Factory
Step 2.把seeder檔案有關欄位定義的內容都移進factory的陣列裡頭
此為5.x的版本
$factory->define(User::class,function(Faker $faker){
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
//略
];
});
此為8.x的版本
別忘了要自己生成Faker並use類別
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$faker = Faker\Factory::create('zh_TW');
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
];
}
將Seeder裏頭關於欄位資料設定的部分移到Factory來處理,Seeder轉身成業務的腳色,只處理和Factory叫單的作業。只需要說明要叫單的模型類別,Laravel會自動找到對應的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生成資料的陣列
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing