Laravel 5:找不到 DB 种子类
Posted
技术标签:
【中文标题】Laravel 5:找不到 DB 种子类【英文标题】:Laravel 5: DB Seed class not found 【发布时间】:2015-07-22 11:03:17 【问题描述】:我有这个 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”。无济于事。我做错了什么?
【问题讨论】:
$this->call('\MemberInvitationSeeder');
有什么不同吗?
或use App\MemberInvitationSeeder
in DatabaseSeeder.php
它只是声称 \MemberInvitationSeeder 未找到...
使用 App\MemberInvitationSeeder 没有效果。仍然没有找到。
你记得运行 composer dump-autoload 吗?
【参考方案1】:
第一步 - 生成种子:
php artisan make:seed MemberInvitationSeeder
第二步 - 在 DatabaseSeeder.php 中添加一行:
$this->call(MemberInvitationSeeder::class);
第三步:
composer dump-autoload
第四步:
php artisan db:seed
这应该可以工作
如果这不是线索,请检查 composer.json 文件并确保您在“自动加载”部分中有以下代码:
"classmap": [
"database"
],
【讨论】:
运行“composer dump-autoload”只是我需要做的事情。 这应该是公认的答案,当前的答案是基于错误的结论或知识缺失。 很酷但有点 OT:您可以使用您的模型来播种数据库。而不是DB::table('my_foos')->insert(['col1' => 'Value 1'])
使用MyFoos::create(['col1' => 'Value1'])
。好处是,自动维护的created_at
和updated_at
正在为您填写。使用 DB::table('x')->insert()
时,它们是空的。【参考方案2】:
我遇到了类似的错误,但我使用的是 DB 外观 DB::table
而不是模型。我发布答案以防万一有人遇到类似问题。
种子文件有命名空间namespace Database\Seeders;
,而laravel试图在命名空间内寻找数据库类,因此出现了错误。
Class 'Database\Seeders\DB' not found
.
决议:
删除命名空间并运行composer dump-autoload
或向\DB::table('stock_categories')->([ ... ]);
添加一个反斜杠,以便 Laravel 开始从根目录查找 DB 外观(不是从指定的命名空间)
例如,
\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
] );
【讨论】:
【参考方案3】:如果你想使用字符串作为参数,你应该包含命名空间
$this->call('Database\Seeders\MemberInvitationSeeder');
【讨论】:
种子文件的路径无需添加。$this->call([MemberInvitationSeeder::class]);
这个就够了
你的方法就够了,我同意,但我的也行。只是一种选择【参考方案4】:
这对我有用
composer dump-autoload
php artisan db:seed
【讨论】:
【参考方案5】:如果上述解决方案不起作用,请尝试此解决方案。
您可能已经更改了命名空间(默认情况下,它是“App”)。
你需要做的是去composer.json
文件并检查这个:
"autoload":
"classmap": [
"database"
],
"psr-4":
"App\\": "app/"
,
如果命名空间是 App 这样的例子,这个解决方案不适合你。
否则,使用您找到的命名空间并将该行插入到播种器类中:
use NameSpaceFound\User;
【讨论】:
【参考方案6】:我通过将类添加到播种文件中解决了这个问题,使用指令use
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
【讨论】:
【参考方案7】:我相信我现在知道原因了。
新类 MemberInvitationSeeder 不在 composer.json 文件的自动加载类中。
它不存在,因为我手动添加了该类。
现在,如果我再次添加此类类,我应该使用什么来让我的类自动加载到自动加载器?
【讨论】:
查看您的 composer.json 文件。在autoload
部分,您应该看到它在哪里设置classmap
,并且它应该在数组中有"database"
,它告诉作曲家将该文件夹中的所有内容添加到自动加载器。如果它不在那里,那是你的问题。如果它在那里,尝试composer self-update
然后composer dump
看看是否有帮助。以上是关于Laravel 5:找不到 DB 种子类的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.6 db:seed 抛出 FatalThrowableError:找不到类 'APP\Todo'
在 Laravel 5 中找不到类“App\Http\Controllers\Artisan”