![](/img/trans.png)
[英]Laravel 5.6 db:seed throws FatalThrowableError : Class 'APP\Todo' not found
[英]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”。 无济于事。 我究竟做错了什么?
第一步- 生成种子:
php artisan make:seed MemberInvitationSeeder
第二步- 在 DatabaseSeeder.php 添加行:
$this->call(MemberInvitationSeeder::class);
第三步:
composer dump-autoload
第四步:
php artisan db:seed
这应该工作
如果这不是线索,请检查 composer.json 文件并确保您在“自动加载”部分有以下代码:
"classmap": [
"database"
],
我通过将类添加到种子文件中解决了这个问题,指令use
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
我相信我现在知道原因了。
新类 MemberInvitationSeeder 不在 composer.json 文件的自动加载类中。
它不在那里,因为我手动添加了该类。
现在,展望未来,如果我再次添加这样的类,我应该使用什么来让我的类自动加载到自动加载器?
这对我有用
composer dump-autoload
php artisan db:seed
我遇到了类似的错误,但我使用的是 DB Facade DB::table
而不是模型。 我发布答案以防万一有人有类似的问题。
播种机文件具有命名namespace Database\\Seeders;
命名namespace Database\\Seeders;
并且 laravel 试图在命名空间中查找 DB 类,因此出现了错误。
Class 'Database\\Seeders\\DB' not found
。
决议:
composer dump-autoload
\\DB::table('stock_categories')->([ ... ]);
所以 Laravel 开始从根(而不是从指定的命名空间)查看数据库外观例如,
\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
] );
如果上述解决方案不起作用,请尝试此方法。 您可能更改了命名空间(默认情况下,它是“App”)。 您需要做的是转到composer.json
文件并检查:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
如果命名空间是 App 像这个例子,这个解决方案不适合你。
否则,使用您找到的命名空间并将该行插入到您的播种机类中:
use NameSpaceFound\User;
如果要将字符串用作参数,则应包含命名空间
$this->call('Database\Seeders\MemberInvitationSeeder');
在制作php artisan make:seed SeederName
之后,您需要在php artisan db:seed
之后运行composer dump-autoload
命令它正在为我工作。
我正面临这个问题 laravel package 用spatie来解决这个问题
1- append composer.json 中的 package 播种机路径
"autoload": {
"psr-4": {
...
"{packagename}\\{vendorname}\\Database\\Seeders\\": "database/seeders"
}
},
composer update
更新作曲家composer dump-autoload
加载你的类如果它不起作用,请删除Vendor文件夹并运行composer install
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.