3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
Database Seeding PHP:7.2 Laravel:5.8 在撰寫專案的測試時,最苦惱的問題莫過於還要自行在 DB 建立相關的測試資料,Laravel 為了解決這個問題,提供了 Seed 類別協助匯入測試資料。 Generating Seeders 首先,需要先透過 artisan 自動建立 seeder 檔案,此檔案將會紀錄我們匯入資料的設定: php artisan make:seeder MemberTableSeeder 建立完成以後,就可以在 database/seeds 中發現 MemberTableSeeder.php 的檔案。 檔案裡面只會有一個 run() 的 method,當執行指令時,就會依照該 method 裡面的操作進行資料匯入。 範例 use Illuminate\Database\Seeder; use Illuminate\Support\Str; use Illuminate\Support\Facades\DB; class MemberTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // 一次建立 10 筆 for ($i = 1; $i <= 10; $i++) { // 透過 DB class 建立資料 DB::table('member')->insert([ 'label_id' => rand(1, 100), 'name' => Str::random(10), // 產生長度 10 的字串 'password' => bcrypt('secret'), // 產生亂數密碼 'email' => Str::random(10) . '@gmail.com', 'created_at' => time() ]); } } } Notice: 產生亂數字串的使用方法在 Laravel 不同的版本中都略有差異,使用前記得先參考該版本的文件 Helpers。 Using Model Factories 除了使用 DB class insert 資料之外,也可以使用 Factory 搭配 Eloquent Model 定義 directory 以供 Seeder 使用。 另外, Factory 是使用 Facker 這個套件協助建立測試資料,因此在資料操作上會方便許多。 建立 Factory php artisan make:factory MemberFactory 設定 MemberFactory (database/factories) use Faker\Generator as Faker; use Illuminate\Support\Str; use App\Models\Member; $factory->define(Member::class, function (Faker $faker) { return [ 'label_id' => Label::all()->random()->id, // 搭配 Model 匯入關聯的 ID 'name' => $faker->name, 'password' => bcrypt('secret'), 'email' => $faker->unique()->safeEmail, 'created_at' => time() ]; }); Notice: 相關 Faker 操作可以參考官方文件 Setting Seeders 在設定完成以後,我們就要執行資料的匯入,artisan 預設會去執行 database/seeds/DatabaseSeeder.php,因此我們在寫好 Seeders 後,還要在 DatabaseSeeder 控制呼叫的邏輯。 DatabaseSeeder.php

本文由blogjohnsonluorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦