web-dev-qa-db-ja.com

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');
        }
    }

DatabaseSeeder.phpファイルの兄弟であるこのファイルMemberInvitationSeeder.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' => '[email protected]',
                'mobile_phone' => '444-342-4234',
                'created_at' => new DateTime
            ] );

        }
    }

今、私は電話する

php artisan db:seed

そして私は得る:

[ReflectionException]                        
  Class MemberInvitationSeeder does not exist

「composer dump-autoload」など、見つけられるすべてを試しました。無駄に。私は何を間違えていますか?

21
JasonGenX

私は今その理由を知っていると信じています。

新しいクラスMemberInvitationSeederは、composer.jsonファイルの自動ロードクラスにはありませんでした。

そのクラスを手動で追加したため、そこにはありませんでした。

さて、今後、そのようなクラスを再度追加する場合、クラスがオートローダーに自動的にアクセスするために何を使用する必要がありますか?

1
JasonGenX

ステップ1-シードを生成します:

php artisan make:seed MemberInvitationSeeder

ステップ2-DatabaseSeeder.phpに次の行を追加します。

$this->call(MemberInvitationSeeder::class);

ステップ

composer dump-autoload

ステップ4

php artisan db:seed

これは動作するはずです


これが手がかりでない場合は、ファイルcomposer.jsonをチェックし、「autoload」セクションにこのコードがあることを確認してください。

"classmap": [
    "database"
],
69

命令useを使用して、クラスをシーダーファイルに追加することでこれを解決しました。

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
7
entoniperez

上記の解決策が機能しない場合は、これを試してください。名前空間を変更した可能性があります(デフォルトでは「App」です)。あなたがする必要があるのは、composer.jsonファイルして、これを確認します。

"autoload": {
      "classmap": [
          "database"
      ],
      "psr-4": {
          "App\\": "app/"
      }
  },

名前空間がこの例のようにAppである場合、このソリューションはあなたに向いていません。

そうでない場合は、見つけた名前空間を取得して、その行をシーダークラスに挿入します。

use NameSpaceFound\User;
0
iahmedbacha