国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Laravel 5.8 中文文件手冊 / 數(shù)據(jù)填充

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

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


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

簡介

Laravel 包含一個填充類可以為你的數(shù)據(jù)庫填充測試數(shù)據(jù)。所有的填充類都放在 database/seeds 目錄下。你可以隨意為填充類命名, 但是更建議您遵守類似 UsersTableSeeder 的命名規(guī)范。通常, Laravel 默認定義了一個  DatabaseSeeder 類。通過這個類,你可以用 call 方法來運行其它的 seed 類從而控制數(shù)據(jù)填充的順序。

編寫 Seeders

運行 make:seeder 這個 Artisan 命令 來生成 Seeder。 由框架生成的 seeders 都將被放置在 database/seeds 目錄下

php artisan make:seeder UsersTableSeeder

一個 seeder 類只包含一個默認方法:run 。 這個方法會在執(zhí)行 db:seed 這個 Artisan 命令 時被調(diào)用。 在  run 方法里你可以根據(jù)需要在數(shù)據(jù)庫中插入數(shù)據(jù)。你也可以用 查詢構(gòu)造器 或 Eloquent 模型工廠 來手動插入數(shù)據(jù)。

{tip} 批量賦值保護 會在數(shù)據(jù)填充時自動禁用。

如下所示,在默認的 DatabaseSeeder 類中的 run 方法中添加一條數(shù)據(jù)插入語句:

  <?php
      use Illuminate\Support\Str;
      use Illuminate\Database\Seeder;
      use Illuminate\Support\Facades\DB;
      class DatabaseSeeder extends Seeder{    
      /**
     * Run the database seeds.
     *
     * @return void
     */    
    public function run()   
     {       
         DB::table('users')->insert([        
             'name' => Str::random(10),            
             'email' => Str::random(10).'@gmail.com',            
             'password' => bcrypt('secret'),       
           ]);  
        }
    }

{tip} 你在 run 的方法簽名中可以用類型來約束你需要的依賴。它們會被 Laravel 服務(wù)容器 自動解決。

使用模型工廠

當(dāng)然,手動為每個模型填充指定屬性很麻煩。作為替代方案,你可以使用 model 工廠 輕松地生成大量數(shù)據(jù)庫數(shù)據(jù)。 首先, 閱讀 model 工廠文檔 來學(xué)習(xí)如何定義工廠文件,一旦定義好了你的工廠文件,然后就可以使用 factory 這個輔助函數(shù)來向數(shù)據(jù)庫中插入數(shù)據(jù)。

例如,創(chuàng)建 50 個用戶并為每個用戶創(chuàng)建關(guān)聯(lián):

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

調(diào)用其它 Seeders

DatabaseSeeder 類中,你可以使用 call 方法來運行其它的 seed 類。使用 call 方法可以將數(shù)據(jù)填充拆分成多個文件,這樣就不會使單個 seeder 變得非常大。只需簡單傳遞要運行的 seeder 類名稱即可:

/**
 * 運行數(shù)據(jù)庫 seeds。
 *
 * @return void
 */
 public function run(){
     $this->call([     
        UsersTableSeeder::class,        
        PostsTableSeeder::class,        
        CommentsTableSeeder::class,    
       ]);
  }

運行 Seeders

完成 seeder 類的編寫之后,你可能需要使用 dump-autoload 命令重新生成 Composer 的自動加載器:

composer dump-autoload

現(xiàn)在你可以使用 Artisan 命令 db:seed 來填充數(shù)據(jù)庫了。默認情況下, db:seed 命令將運行  DatabaseSeeder 類,這個類可以用來調(diào)用其它 Seed 類。不過,你也可以使用 --class 選項來指定一個特定的 seeder 類:

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

你也可以用 migrate:refresh 這個命令來填充數(shù)據(jù)庫,該命令會回滾并重新運行所有遷移。這個命令可以用來重建數(shù)據(jù)庫:

php artisan migrate:refresh --seed
本文章首發(fā)在 LearnKu.com 網(wǎng)站上。