Laravel 5:未找到数据库种子 class
Laravel 5: DB Seed class not found
我有这个DatabaseSeeder.php:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call('MemberInvitationSeeder');
}
}
我有这个文件 MemberInvitationSeeder.php,与 DatabaseSeeder.php 文件
同级
<?php
use Illuminate\Database\Seeder;
use App\MemberInvitation;
class MemberInvitationSeeder extends Seeder {
public function run()
{
MemberInvitation::truncate();
MemberInvitation::create( [
'id' => 'BlahBlah' ,//com_create_guid(),
'partner_id' => 1,
'fisrt_name' => 'Thats',
'last_name' => 'Me',
'email' => 'me@mymail.com',
'mobile_phone' => '444-342-4234',
'created_at' => new DateTime
] );
}
}
现在我打电话给
php artisan db:seed
我得到:
[ReflectionException]
Class MemberInvitationSeeder does not exist
我尝试了所有我能找到的东西,包括 "composer dump-autoload"。无济于事。我做错了什么?
我相信我现在知道原因了。
新的 class MemberInvitationSeeder 不在 composer.json 文件中自动加载的 classes 中。
它不在那里,因为我手动添加了 class。
现在,如果我再次添加这样的 classes,我应该使用什么才能让我的 class 自动加载到自动加载器?
第一步 - 生成种子:
php artisan make:seed MemberInvitationSeeder
第二步 - 在DatabaseSeeder.php中添加行:
$this->call(MemberInvitationSeeder::class);
第三步:
composer dump-autoload
第四步:
php artisan db:seed
这应该有效
如果这不是线索,请检查 composer.json 文件并确保“自动加载”部分中有以下代码:
"classmap": [
"database"
],
我通过将 class 添加到种子文件来解决这个问题,使用指令 use
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
如果上述解决方案都不起作用,请试试这个。
您可能更改了命名空间(默认情况下,它是 "App")。
您需要做的是转到 composer.json
文件并检查:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
如果名称空间是像本例中的 App,则此解决方案不适合您。
否则,获取您找到的命名空间并将该行插入到您的播种器中 class:
use NameSpaceFound\User;
这对我有用
composer dump-autoload
php artisan db:seed
如果要使用字符串作为参数,则应包含命名空间
$this->call('Database\Seeders\MemberInvitationSeeder');
我 运行 遇到了类似的错误,但我使用的是 DB facade DB::table
而不是模型。我发布答案以防万一有人遇到类似问题。
种子文件有命名空间 namespace Database\Seeders;
,laravel 试图在命名空间中寻找数据库 class,因此出现了错误。
Class 'Database\Seeders\DB' not found
.
分辨率:
- 删除命名空间并运行
composer dump-autoload
- 或 向
\DB::table('stock_categories')->([ ... ]);
添加反斜杠,这样 Laravel 开始从根目录查找 DB facade (不是来自指定的命名空间)
例如,
\DB::table('MemberInvitation')->insert( [
'id' => 'BlahBlah' ,//com_create_guid(),
'partner_id' => 1,
'fisrt_name' => 'Thats',
'last_name' => 'Me',
'email' => 'me@mymail.com',
'mobile_phone' => '444-342-4234',
'created_at' => new DateTime
] );
我有这个DatabaseSeeder.php:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call('MemberInvitationSeeder');
}
}
我有这个文件 MemberInvitationSeeder.php,与 DatabaseSeeder.php 文件
同级<?php
use Illuminate\Database\Seeder;
use App\MemberInvitation;
class MemberInvitationSeeder extends Seeder {
public function run()
{
MemberInvitation::truncate();
MemberInvitation::create( [
'id' => 'BlahBlah' ,//com_create_guid(),
'partner_id' => 1,
'fisrt_name' => 'Thats',
'last_name' => 'Me',
'email' => 'me@mymail.com',
'mobile_phone' => '444-342-4234',
'created_at' => new DateTime
] );
}
}
现在我打电话给
php artisan db:seed
我得到:
[ReflectionException]
Class MemberInvitationSeeder does not exist
我尝试了所有我能找到的东西,包括 "composer dump-autoload"。无济于事。我做错了什么?
我相信我现在知道原因了。
新的 class MemberInvitationSeeder 不在 composer.json 文件中自动加载的 classes 中。
它不在那里,因为我手动添加了 class。
现在,如果我再次添加这样的 classes,我应该使用什么才能让我的 class 自动加载到自动加载器?
第一步 - 生成种子:
php artisan make:seed MemberInvitationSeeder
第二步 - 在DatabaseSeeder.php中添加行:
$this->call(MemberInvitationSeeder::class);
第三步:
composer dump-autoload
第四步:
php artisan db:seed
这应该有效
如果这不是线索,请检查 composer.json 文件并确保“自动加载”部分中有以下代码:
"classmap": [
"database"
],
我通过将 class 添加到种子文件来解决这个问题,使用指令 use
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
如果上述解决方案都不起作用,请试试这个。
您可能更改了命名空间(默认情况下,它是 "App")。
您需要做的是转到 composer.json
文件并检查:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
如果名称空间是像本例中的 App,则此解决方案不适合您。
否则,获取您找到的命名空间并将该行插入到您的播种器中 class:
use NameSpaceFound\User;
这对我有用
composer dump-autoload
php artisan db:seed
如果要使用字符串作为参数,则应包含命名空间
$this->call('Database\Seeders\MemberInvitationSeeder');
我 运行 遇到了类似的错误,但我使用的是 DB facade DB::table
而不是模型。我发布答案以防万一有人遇到类似问题。
种子文件有命名空间 namespace Database\Seeders;
,laravel 试图在命名空间中寻找数据库 class,因此出现了错误。
Class 'Database\Seeders\DB' not found
.
分辨率:
- 删除命名空间并运行
composer dump-autoload
- 或 向
\DB::table('stock_categories')->([ ... ]);
添加反斜杠,这样 Laravel 开始从根目录查找 DB facade (不是来自指定的命名空间)
例如,
\DB::table('MemberInvitation')->insert( [
'id' => 'BlahBlah' ,//com_create_guid(),
'partner_id' => 1,
'fisrt_name' => 'Thats',
'last_name' => 'Me',
'email' => 'me@mymail.com',
'mobile_phone' => '444-342-4234',
'created_at' => new DateTime
] );