iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
0
Software Development

後端PHP+Laravel--新手實戰日記系列 第 26

Day26-Laravel新手基礎訓-Database: Seeding 埋下資料種子

  • 分享至 

  • xImage
  •  

胎嘎侯

在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命令,不過此為推回所有遷移並且再執行一次,如果你的資料庫已有寶貴數據,請評估您的狀況是否要丟棄。

今天就先到這啦~明天見!


上一篇
Day25-Laravel新手基礎訓-Eloquent: Many to Many 關係綁定
下一篇
Day27-Laravel Socialite-簡易實現Github第3方登入(1)
系列文
後端PHP+Laravel--新手實戰日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言