pengisian data
- Menggunakan Model Factory
- Memanggil Seeders lain
- Run Seeders
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/seeds
make: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 --seedSebuah 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
: 🎜{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 pembantufactory
untuk memasukkan data ke dalam pangkalan data. 🎜🎜Sebagai contoh, buat 50 pengguna dan cipta persatuan untuk setiap pengguna: 🎜rrreee🎜🎜🎜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🎜🎜🎜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🎜. 🎜🎜