Laravel 5-職人の種[ReflectionException]クラスSongsTableSeederが存在しません


275

php artisan db:seedを実行すると、次のエラーが発生します。

[ReflectionException] Class SongsTableSeeder does not exist

何が起こっている?

私のDatabaseSeederクラス:

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

}

私のSongsTableSeederクラス:

<?php

// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use DB;

class SongsTableSeeder extends Seeder {

    public function run()
    {
        $faker = Faker::create();
        $songs = [];
        foreach(range(1, 10) as $index)
        {
            $songs[] = ['title' => $faker->words(rand(1,4))];
        }

        DB::table('songs')->insert($songs);

    }

}

108
composer dump-autoload
トーマスジェンセン

Faker \ FactoryをFakerとして使用すると思いました仕事をしていますか?
Sasha

SongsTableSeederクラス定義を含むファイルへのパスは何ですか?
Wouter J 2014


これはダンプで悪い
Luigi Lopez

回答:


750

SongsTableSeederファイルSongsTableSeeder.phpがあるのと同じディレクトリのファイルに置く必要がありDatabaseSeeder.phpます。

そして、あなたはあなたのコンソールで実行する必要があります:

composer dump-autoload

新しいクラスマップを生成して実行するには:

php artisan db:seed

私はそれをテストしました。Laravel 5で問題なく動作しています


1
シーダークラスでモデルを「使用」していませんでした。今は正常に動作します。
ジェイミープール

1
composer dumpautoloadまた、ハエ
コナーリーチ

composer dump-autoloadは私に問題を解決しました。composer dump-autoloadが実際に行うことは何ですか?
ルイスアルメイダ

5
@LuísAlmeida dump-autoloadは、プロジェクトに含める必要があるすべてのクラスのリストを再生成します。これは、プロジェクト内に新しいクラスがある場合に使用されます。通常実行make:*すると、新しく作成されたクラスが追加されますが、手動でシーダーを作成した場合は、これは発生しません。少なくともそれが、5分の検索から機能することを理解する方法です。私は専門家ではありません。
Xander Luciano

私は開発サーバーでLaravel 5.8を使用してこのソリューションを試してみcomposer dump-autoloadました。
Mycodingproject

19

私はこれを行うことでそれを解決しました:

  1. ファイルの内容をコピーします。
  2. ファイルを削除します。
  3. コマンド:php artisan make:seederを実行します。
  4. ファイルの内容をこのファイルにコピーして戻します。

これは、ファイル名を変更したために起こりました。変更後に動作しなかった理由がわかりません。


2
おそらくcomposer dump-autoを実行する方が簡単でした。オートローダーは古いファイルを探しています。したがって、コマンドラインを介してこのファイルをダンプすると、新しいファイルで新しいオートローダーファイルが生成されます。したがって、将来的にはこれを試してください=)
Ron van Asseldonk


van Asseldokは、composer dump-autoload私にはうまくいきません。シーダークラスを再作成して機能させる必要があります。
М.Б.

これは私を助けました。'composer dump-autoload'も私にとっては機能しません。サーバー設定に何らかの影響があるか、共有サーバーであるという事実です。
Derk Jan Speelman

16

ファイルSongsTableSeeder.phpは、database / seedsディレクトリまたはそのサブディレクトリにあるはずです。

実行する必要があります:

composer dump-autoload

その後:

php artisan db:seed

または:

php artisan db:seed --class=SongsTableSeeder

1
「php artisan db:seed --class = SongsTableSeeder」コマンドで解析エラーを確認できます。んー!
OmiK、2017年

4

SongsTableSeeder.phpは、database / seedsディレクトリにある必要があります

コンソールコマンドステップ:

composer dump-autoload

その後:

php artisan cache:clear

その後:

php artisan optimize

その後:

php artisan db:seed

または:

php artisan db:seed --class=SongsTableSeeder

私のために働いた!特にphp artisan optimizeパート
Moses Ndeda '10

3

私は最新のLaravel 5開発リリースを実行しています。名前空間を変更した場合は、次のようにシードクラスを呼び出す必要があります。

$this->call('\todoparrot\TodolistTableSeeder');

もちろんtodoparrot、指定した名前空間に置き換える必要があります。それ以外の場合、元の質問で示された同じエラーが表示されます。


3

composer dump-autoloadのautoload / classmapセクションに関連して動作することを忘れないでくださいcomposer.json。シーダーディレクトリを変更する必要がある場合、または複数のディレクトリを使用してシーダーを格納する必要がある場合は、注意してください。

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},

0

CustomTableSeederがDatabaseSeederと同じディレクトリにある場合、以下のように使用する必要があります。

$this->call('database\seeds\CustomTableSeeder');

DatabaseSeederファイル内。次に、「DBクラスが見つかりません」という別のエラーがスローされます。次に、次のようにDBファサードをCustomTableSeederファイルに追加する必要があります。

use Illuminate\Support\Facades\DB;

それは私のために働いた!


0

以下の2つのクラスでSINGLE FILEのみを使用しました。

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\Lesson;

use Faker\Factory as Faker;

class DatabaseSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    //Lesson::truncate();

    Model::unguard();

    $this->call("LessonsTableSeeder");


}

}

class LessonsTableSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{

    $faker = Faker::create();

    foreach(range(1,30) as $index) {

        Lesson::create(['title' => $faker->sentence(5), 'body' => $faker->paragraph(4)]);

    }

}

}

0

他のプロジェクトからシードファイルをコピーした場合は、artisanコマンドを実行する必要がありますphp artisan db:seed。それ以外の場合は問題ありません。


0

[ReflectionException] Class Seeder does not existcomposer dump-autoload取得し、を使用すると、preg_match(): JIT compilation failed: no more memory実行するとエラーが発生しました。

私がしたことはphp.iniで変更;pcre.jit=1することです!端末でを使用してパスを見つけることができます!pcre.jit=Offphp --ini

PHP 7.3でMacを使用しています!皆さんの助けになることを願っています!


0

おそらく.php拡張子を指定しても、クラスが見つかりません。

私がやっていたこと:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

私の問題を解決したもの:私がやっていたこと:

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

同じ「反射例外」エラーが発生しました。解決策は、クラスファイルをdevからサーバーにコピーすることでした。ばかげた間違いですが、処理するファイルの数を考えると、毎回サーバーにコピーすることを忘れがちです。


2
この応答は非常に曖昧であり、特定のホスティング設定と結びついています。あなたの入力は評価されますが、これはこの問題の解決策を探している開発者を助けないかもしれません。あなたの問題は、ファイルをサーバーにコピーするのを人間に任せていることが原因だと思います。ファイルがサーバーに自動的にデプロイされるCIパイプラインを使用することをお勧めします:)
charj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.