胎嘎侯
在Laravel中增加資料有三種方式,可以使用Seeder、Factory以及query builder。前幾日解釋如何使用Factory一次批量產生偽造的數據,今天我們來看看利用Database Seeding增加一筆真實測試資料的方式。
官方文件中提到seed類別為填充測試用的資料到資料庫,其命名方式要遵守大駝峰式命名法(upper camel case)
,實際來操作一下。
1.建立Seeder,執行以下命令
php artisan make:seeder UsersTableSeeder
2.UsersTableSeeder.php
於seeder預設方法run
中加上insert方法,以Key和Value的方式新增需要的數據填充至資料庫。
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name'=> 'admin',
'email'=> 'admin@test.com',
'password'=>bcrypt('secret'),
'role'=>'admin',
'other_details'=>'no',
'api_token'=>123456789123456789,
'phone'=>'123-1456-789',
'other_details'=>'逾期'
]);
}
}
3.進入DatabaseSeeder.php,將框架預設的註解取消,call方法才能順利執行$this->call(UsersTableSeeder::class);
。如您是自行建立的seeder文件,記得在此依所想要的執行順序編寫哦。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
官方文件這裡有特別提到一旦寫好了seeder,也許會需要使用dump-autoload命令重新生成Composer的自動加載器,執行此段命令composer dump-autoload
。
4.好啦,放下種子之後呼叫Seeders出場!這裡有兩種方式,差別如下。
//默認db:seed命令運行DatabaseSeeder類
php artisan db:seed
//可以使用--class選項來指定要單獨運行的特定種子類:
php artisan db:seed --class=UsersTableSeeder
顯示Database seeding completed successfully.到這步驟沒出什麼錯,去資料庫看看insert的數據情況。
很好!成功寫入。
疑?怎麼會是111?前面110筆是我先前使用Factory寫入的偽造數據啦。
如果你想要乾淨的資料庫來重新寫入數據,您可以使用php artisan migrate:refresh --seed
命令,不過此為推回所有遷移並且再執行一次,如果你的資料庫已有寶貴數據,請評估您的狀況是否要丟棄。
今天就先到這啦~明天見!