【问题标题】:What is database seeding in Laravel?Laravel 中的数据库播种是什么?
【发布时间】:2017-05-03 12:40:02
【问题描述】:

我使用 Laravel 框架,最近我被告知有一个名为 database seeding 的东西会为我们的测试生成一个假数据集。我的理解正确吗?

这很奇怪。这个怎么运作?它如何知道我在数据库的 X 列中需要哪种类型的数据?以及它是如何产生的?

另外,我不能为我的真实数据集制作种子(类似于导出)?你知道,我英文不太好,所以我无法理解数据库领域中seed的概念。

【问题讨论】:

    标签: php laravel laravel-seeding


    【解决方案1】:

    是的,Laravel 附带了一个非常棒且受欢迎的包,名为 - Faker。您可以使用 Faker 编写此示例并生成 10 个这样的用户(在 DatabaseSeeder.php 内):

    use DB;
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    
    use Faker\Factory as Faker;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            $faker = Faker::create();
            foreach (range(1,10) as $index) {
                DB::table('users')->insert([
                    'name' => $faker->name,
                    'email' => $faker->email,
                    'password' => bcrypt('secret'),
                ]);
            }
        }
    }
    

    就是这样 - $faker->name 将生成一个随机人名,$faker->email - 一个随机电子邮件。运行命令php artisan db:seed 后,您的数据库将填充一些随机条目。

    您可以在composer.json 文件中的require-dev 下找到这个包:

    "require-dev": {
        "fzaninotto/faker": "^1.6", // <------- here
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.0",
        "symfony/css-selector": "3.1.*",
        "symfony/dom-crawler": "3.1.*",
        "laracasts/testdummy": "~2.0"
    },
    

    Faker 可以生成大量数据,其中一些数据如下:

    $faker->randomDigit;
    $faker->numberBetween(1,100);
    $faker->word;
    $faker->paragraph;
    $faker->lastName;
    $faker->city;
    $faker->year;
    $faker->domainName;
    $faker->creditCardNumber;
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      通常您使用model Factoriesfaker 来创建假数据(包括关系等)以开发和测试您的应用程序。

      如果您想播种真实数据,只需使用命令导入转储即可。或者,如果您的数据类似于包含国家/地区的表格,请创建插入真实数据的播种器,而无需使用 faker 或模型工厂。

      另外,您可以使用some package 从真实数据创建播种机。

      您可能想阅读docs on seeding

      【讨论】:

      • 1) 当我制作真实数据的种子时,它将存储在哪里? 2) 在这种情况下,当我使用php artisan migrate --seed 时,迁移是否会被刷新并自动重新插入所有真实数据?
      • 1) 在播种机类中。或者播种机类将调用一些命令(它取决于包)。 2) 是的。
      猜你喜欢
      • 2015-09-25
      • 2016-02-10
      • 1970-01-01
      • 2018-05-20
      • 2010-10-20
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多