remplissage des données
Utilisation de Model Factory
- Appel d'autres Seeders
- Intro duction
- Laravel inclut une classe de remplissage qui peut remplir votre base de données avec des tests données. Toutes les classes de remplissage sont placées dans la méthode pour exécuter d'autres classes de départ afin de contrôler l'ordre de remplissage des données.
Écriture de Seeders
Exécutez la commande make:seeder
Artisan pour générer le Seeder. Les seeders générés par le framework seront placés dans le répertoire 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 --seedUne classe seeder ne contient qu'une seule méthode par défaut :
run
. Cette méthode sera appelée lors de l'exécution de la commande db:seed
Artisan. Dans la méthode run
, vous pouvez insérer des données dans la base de données selon vos besoins. Vous pouvez également utiliser le générateur de requêtes ou la fabrique de modèles Eloquent pour insérer des données manuellement. Comme indiqué ci-dessous, ajoutez une instruction d'insertion de données dans la méthode run
dans la classe DatabaseSeeder
par défaut : 🎜{tip} You You Vous pouvez utiliser des types dans la signature de méthode de run
pour contraindre les dépendances dont vous avez besoin. Ils sont automatiquement résolus par le conteneur de services Laravel. 🎜
🎜🎜🎜Utiliser des usines modèles
🎜Bien sûr, manuellement Il est fastidieux de renseigner des propriétés spécifiques pour chaque modèle. Vous pouvez également utiliser une fabrique de modèles pour générer facilement de grandes quantités de données de base de données. Tout d'abord, lisez la documentation de la fabrique modèle pour savoir comment définir un fichier de fabrique. Une fois que vous avez défini votre fichier de fabrique, vous pouvez ensuite utiliser la fonction d'assistancefactory
pour insérer des données dans la base de données. 🎜🎜Par exemple, créez 50 utilisateurs et créez des associations pour chaque utilisateur : 🎜rrreee🎜🎜🎜DatabaseSeeder
, vous pouvez utiliser la méthode call
pour exécuter d'autres classes seed. Utilisez la méthode call
pour diviser la population de données en plusieurs fichiers afin qu'un seul seeder ne devienne pas extrêmement volumineux. Transmettez simplement le nom de la classe seeder que vous souhaitez exécuter : 🎜rrreee🎜🎜🎜dump-autoload
pour régénérer l'autoloader de Composer : 🎜rrreee🎜Vous pouvez maintenant utiliser la commande Artisan db:seed
pour remplir la base de données . Par défaut, la commande db:seed
exécutera la classe DatabaseSeeder
, qui peut être utilisée pour appeler d'autres classes Seed. Cependant, vous pouvez également utiliser l'option --class
pour spécifier une classe de seeder spécifique : 🎜rrreee🎜 Vous pouvez également utiliser la commande migrate:refresh
pour remplir la base de données. commande Toutes les migrations sont annulées et réexécutées. Cette commande peut être utilisée pour reconstruire la base de données : 🎜rrreee🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜