pengisian data


Menulis Seeders

Pengenalan

Laravel termasuk kelas pengisi yang boleh mengisi pangkalan data anda dengan ujian data. Semua kelas pengisian diletakkan dalam kaedah

untuk menjalankan kelas benih lain untuk mengawal susunan pengisian data. database/seeds 目录下。你可以随意为填充类命名, 但是更建议您遵守类似 UsersTableSeeder 的命名规范。通常, Laravel 默认定义了一个  DatabaseSeeder 类。通过这个类,你可以用 call

Menulis Seeders

Jalankan perintah make:seeder Artisan untuk menjana Seeder. Seeders yang dijana oleh rangka kerja akan diletakkan dalam direktori database/seedsmake:seeder 这个 Artisan 命令 来生成 Seeder。 由框架生成的 seeders 都将被放置在 database/seeds 目录下

php artisan make:seeder UsersTableSeeder

一个 seeder 类只包含一个默认方法:run 。 这个方法会在执行 db:seed 这个 Artisan 命令 时被调用。 在  run 方法里你可以根据需要在数据库中插入数据。你也可以用 查询构造器 或 Eloquent 模型工厂 来手动插入数据。

{tip} 批量赋值保护 会在数据填充时自动禁用。

如下所示,在默认的 DatabaseSeeder 类中的 run 方法中添加一条数据插入语句:

  <?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 服务容器 自动解决。

使用模型工厂

当然,手动为每个模型填充指定属性很麻烦。作为替代方案,你可以使用 model 工厂 轻松地生成大量数据库数据。 首先, 阅读 model 工厂文档 来学习如何定义工厂文件,一旦定义好了你的工厂文件,然后就可以使用 factory 这个辅助函数来向数据库中插入数据。

例如,创建 50 个用户并为每个用户创建关联:

/**
 * 运行数据库填充。
 *
 * @return void
 */
 public function run(){
     factory(App\User::class, 50)->create()->each(function ($u) {
             $u->posts()->save(factory(App\Post::class)->make());   
           });
     }

调用其它 Seeders

DatabaseSeeder 类中,你可以使用 call 方法来运行其它的 seed 类。使用 call 方法可以将数据填充拆分成多个文件,这样就不会使单个 seeder 变得非常大。只需简单传递要运行的 seeder 类名称即可:

/**
 * 运行数据库 seeds。
 *
 * @return void
 */
 public function run(){
     $this->call([     
        UsersTableSeeder::class,        
        PostsTableSeeder::class,        
        CommentsTableSeeder::class,    
       ]);
  }

运行 Seeders

完成 seeder 类的编写之后,你可能需要使用 dump-autoload 命令重新生成 Composer 的自动加载器:

composer dump-autoload

现在你可以使用 Artisan 命令 db:seed 来填充数据库了。默认情况下, db:seed 命令将运行  DatabaseSeeder 类,这个类可以用来调用其它 Seed 类。不过,你也可以使用 --class 选项来指定一个特定的 seeder 类:

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

你也可以用 migrate:refresh

php artisan migrate:refresh --seed

Sebuah kelas seeder hanya mengandungi satu kaedah lalai: run. Kaedah ini akan dipanggil apabila melaksanakan perintah db:seed Artisan. Dalam kaedah run anda boleh memasukkan data ke dalam pangkalan data mengikut keperluan. Anda juga boleh menggunakan pembina pertanyaan atau kilang model Eloquent untuk memasukkan data secara manual. Seperti yang ditunjukkan di bawah, tambahkan pernyataan sisipan data dalam kaedah run dalam kelas lalai DatabaseSeeder:
rrreee
🎜{tip} You You boleh menggunakan jenis dalam tandatangan kaedah run untuk mengekang kebergantungan yang anda perlukan. Mereka diselesaikan secara automatik oleh bekas perkhidmatan Laravel. 🎜
🎜🎜🎜
🎜

Menggunakan kilang model

🎜Sudah tentu, secara manual Adalah menyusahkan untuk mengisi sifat khusus untuk setiap model. Sebagai alternatif, anda boleh menggunakan kilang model untuk menjana sejumlah besar data pangkalan data dengan mudah. Mula-mula, baca dokumentasi kilang model untuk mengetahui cara mentakrifkan fail kilang Setelah anda menentukan fail kilang anda, anda kemudian boleh menggunakan fungsi pembantu factory untuk memasukkan data ke dalam pangkalan data. 🎜🎜Sebagai contoh, buat 50 pengguna dan cipta persatuan untuk setiap pengguna: 🎜rrreee🎜
🎜🎜
🎜< h3 >Panggil Seeder lain🎜Dalam kelas DatabaseSeeder, anda boleh menggunakan kaedah call untuk menjalankan kelas benih lain. Gunakan kaedah panggilan untuk membahagikan populasi data kepada berbilang fail supaya satu pembenih tidak menjadi terlalu besar. Hanya lulus nama kelas seeder yang anda mahu jalankan: 🎜rrreee🎜🎜🎜
🎜🎜Running Seeders🎜🎜Selesai Selepas menulis kelas seeder, anda mungkin perlu menggunakan perintah dump-autoload untuk menjana semula autoloader Komposer: 🎜rrreee🎜Kini anda boleh menggunakan perintah Artisan db:seed untuk mengisi pangkalan datanya . Secara lalai, perintah db:seed akan menjalankan kelas DatabaseSeeder, yang boleh digunakan untuk memanggil kelas Seed lain. Walau bagaimanapun, anda juga boleh menggunakan pilihan --class untuk menentukan kelas seeder tertentu: 🎜rrreee🎜 Anda juga boleh menggunakan perintah migrate:refresh untuk mengisi pangkalan data ini arahan Semua penghijrahan ditarik balik dan dijalankan semula. Perintah ini boleh digunakan untuk membina semula pangkalan data: 🎜rrreee🎜Artikel ini pertama kali diterbitkan di laman web 🎜LearnKu.com🎜. 🎜🎜