从子文件夹中调用数据库播种器

时间:2014-05-28 19:02:52

标签: php laravel-4

我想创建一组数据库种子类,专门用于为我正在编写的测试用例添加数据。

我的计划是将它们放在文件夹中:

app/database/seeds/testData/

然后通过以下命令调用播种器:

php artisan db:seed --class="testData/myTestSeeder"

但是我得到了“类不存在”的错误。

是否可以调用生活在种子子文件夹中的数据库播种器?我没有在文档中看到明确的“是”,但我也没有看到明确的“否”。

3 个答案:

答案 0 :(得分:14)

您不需要在项目上编辑classmap,只需确保运行

即可
composer dump-autoload
将课程移到子文件夹后

完成后,运行此命令(此处无需提及testData)

php artisan db:seed --class="myTestSeeder"

答案 1 :(得分:1)

您需要告诉自动加载器如何加载新类。这个比较简单;将以下内容添加到classmap属性中的composer.json:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/database/seeds/testData"  // <-- Add this
    ]
},

之后,运行composer dump-autoload,现在应该成功加载种子文件。

答案 2 :(得分:1)

例如,当您创建新的Seeder类时:

php artisan make:seeder Authorization/CreateAppRoleSeeder

因此,获得新的课程:

    <?php

    use Illuminate\Database\Seeder;

    class Authorization/CreateAppRoleSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            //
        }
    }

您必须替换class Authorization/CreateAppRoleSeeder extends Seederclass CreateAppRoleSeeder extends Seeder

接下来,执行dump composer命令:

composer dump

在将类添加到文件'database \ Seeder \ DatabaseSeeder'之后 就我而言,例如:

    <?php

    use Illuminate\Database\Seeder;

    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            $this->call(CreateAppRoleSeeder::class);
        }
    }

在那之后执行命令

php artisan db:seed

就我而言

php artisan db:seed --class=CreateAppRoleSeeder

所以会起作用;)