我想创建一组数据库种子类,专门用于为我正在编写的测试用例添加数据。
我的计划是将它们放在文件夹中:
app/database/seeds/testData/
然后通过以下命令调用播种器:
php artisan db:seed --class="testData/myTestSeeder"
但是我得到了“类不存在”的错误。
是否可以调用生活在种子子文件夹中的数据库播种器?我没有在文档中看到明确的“是”,但我也没有看到明确的“否”。
答案 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 Seeder
与class 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
所以会起作用;)