![](/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.