鍍金池/ 教程/ PHP/ 填充數(shù)據(jù)
門面
Laravel Homestead
安裝及配置
測試
HTTP 中間件
加密
升級指南
幫助函數(shù)
應(yīng)用目錄結(jié)構(gòu)
集合
新手入門指南-簡單任務(wù)管理系統(tǒng)
任務(wù)調(diào)度
查詢構(gòu)建器
視圖
驗證
Laravel Cashier(訂購&支付&發(fā)票)
本地化
隊列
調(diào)整器
分頁
文件系統(tǒng)/云存儲
貢獻(xiàn)代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請求
Laravel Elixir
發(fā)行版本說明
Envoy 任務(wù)運行器(SSH任務(wù))
序列化
Session
起步
帶用戶功能的任務(wù)管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務(wù)提供者
Blade 模板引擎
包開發(fā)
用戶認(rèn)證
Artisan 控制臺
HTTP 響應(yīng)
集合
服務(wù)容器
關(guān)聯(lián)關(guān)系
一次請求的生命周期
契約
Redis
錯誤&日志

填充數(shù)據(jù)

1、簡介

Laravel 包含了一個簡單方法來填充數(shù)據(jù)庫——使用填充類和測試數(shù)據(jù)。所有的填充類都位于 database/seeds 目錄。填充類的類名完全由你自定義,但最好還是遵循一定的規(guī)則,比如可讀性,例如UserTableSeeder等等。安裝完 Laravel 后,會默認(rèn)提供一個 DatabaseSeeder 類。從這個類中,你可以使用 call 方法來運行其他填充類,從而允許你控制填充順序。

2、編寫填充器

要生成一個填充器,可以通過 Artisan 命令 make:seeder。所有框架生成的填充器都位于 database/seeders 目錄:

php artisan make:seeder UserTableSeeder

一個填充器類默認(rèn)只包含一個方法:run。當(dāng) Artisan 命令 db:seed運行時該方法被調(diào)用。在 run方法中,可以插入任何你想插入數(shù)據(jù)庫的數(shù)據(jù),你可以使用查詢構(gòu)建器手動插入數(shù)據(jù),也可以使用 Eloquent 模型工廠。 舉個例子,讓我們修改 Laravel 安裝時自帶的 DatabaseSeeder 類,添加一個數(shù)據(jù)庫插入語句到 run 方法:

<?php

use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder{
    /**
     * 運行數(shù)據(jù)庫填充
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

2.1 使用模型工廠

當(dāng)然,手動指定每一個模型填充的屬性是很笨重累贅的,取而代之的,我們可以使用模型工廠來方便的生成大量的數(shù)據(jù)庫記錄。首先,查看模型工廠文檔來學(xué)習(xí)如何定義工廠,定義工廠后,可以使用幫助函數(shù) factory 來插入記錄到數(shù)據(jù)庫。 舉個例子,讓我們創(chuàng)建 50 個用戶并添加關(guān)聯(lián)關(guān)系到每個用戶:

/**
 * 運行數(shù)據(jù)庫填充
 *
 * @return void
 */
public function run(){
    factory('App\User', 50)->create()->each(function($u) {
        $u->posts()->save(factory('App\Post')->make());
    });
}

2.2 調(diào)用額外的填充器

DatabaseSeeder 類中,你可以使用 call 方法執(zhí)行額外的填充類,使用call 方法允許你將數(shù)據(jù)庫填充分解成多個文件,這樣單個填充器類就不會變得無比巨大,只需簡單將你想要運行的填充器類名傳遞過去即可:

/**
 * 運行數(shù)據(jù)庫填充
 *
 * @return void
 */
public function run(){
    Model::unguard();

    $this->call(UserTableSeeder::class);
    $this->call(PostsTableSeeder::class);
    $this->call(CommentsTableSeeder::class);
}

3、運行填充器

編寫好填充器類之后,可以使用 Artisan 命令db:seed來填充數(shù)據(jù)庫。默認(rèn)情況下,db:seed 命令運行可以用來運行其它填充器類的 DatabaseSeeder 類,但是,你也可以使用--class 選項來指定你想要運行的獨立的填充器類:

php artisan db:seed
php artisan db:seed --class=UserTableSeeder

你還可以使用 migrate:refresh 命令來填充數(shù)據(jù)庫,該命令還可以回滾并重新運行遷移,這在需要完全重建數(shù)據(jù)庫時很有用:

php artisan migrate:refresh --seed
上一篇:哈希下一篇:HTTP 路由