remplissage des données


Utilisation de Model Factory

É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/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

Une 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 :
rrreee
🎜{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'assistance factory 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🎜
🎜🎜
🎜< h3 >Appeler d'autres Seeders🎜Dans la classe 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🎜🎜🎜
🎜🎜Running Seeders🎜🎜Terminé après avoir écrit la classe seeder, vous devrez peut-être utiliser la commande 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🎜. 🎜🎜