簡體   English   中英

Laravel 5:未找到 DB 種子 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”。 無濟於事。 我究竟做錯了什么?

第一步- 生成種子:

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 文件的自動加載類中。

它不在那里,因為我手動添加了該類。

現在,展望未來,如果我再次添加這樣的類,我應該使用什么來讓我的類自動加載到自動加載器?

這對我有用

  1. composer dump-autoload
  2. 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"
        }
    },
  1. 然后 go 到您的主項目並使用composer update更新作曲家
  2. 使用composer dump-autoload加載你的類

如果它不起作用,請刪除Vendor文件夾並運行composer install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM