web-dev-qa-db-ja.com

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

php artisan db:seedを実行すると、次のようなエラーメッセージが表示されます。

[ReflectionException] Class SongsTableSeeder does not exist

何が起こっている?

MyDatabaseSeederクラス:

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

}

MySongsTableSeederクラス:

<?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);

    }

}
207
Sasha

あなたはあなたがあなたのSongsTableSeeder.phpファイルを持っているのと同じディレクトリにあるファイルDatabaseSeeder.phpSongsTableSeederを入れる必要があります。

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

composer dump-autoload

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

php artisan db:seed

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

572

私はこれをやって解決しました:

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

これは、ファイル名を変更したために起こりました。変更後になぜうまくいかなかったのか私にはわかりません。

17

ファイルSongsTableSeeder.phpは、database/seedsディレクトリまたはその下に置く必要があります。サブディレクトリ。

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

composer dump-autoload

その後:

php artisan db:seed

または

php artisan db:seed --class=SongsTableSeeder
9
simhumileco

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

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

todoparrotを指定の名前空間に置き換える必要があることは明らかです。それ以外の場合、元の質問と同じエラーが表示されます。

3
Jason

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

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

SongsTableSeeder.phpはdatabase/seedsディレクトリになければなりません

コンソールコマンドの手順

composer dump-autoload

その後:

php artisan cache:clear

その後:

php artisan optimize

その後:

php artisan db:seed

または

php artisan db:seed --class=SongsTableSeeder
2

CustomTableSeederがDatabaseSeederと同じディレクトリにある場合は、次のように使用します。

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

databaseSeederファイルに。 「DBクラスが見つかりません」というエラーが表示されたら、以下のようにCustomTableSeederファイルにDBファサードを追加します。

use Illuminate\Support\Facades\DB;

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

0
ivahidmontazer

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

0
Shahid Hussain

以下の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
Vinod Joshi

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

php.ini;pcre.jit=1pcre.jit=Offに変更しました。ターミナルでphp --iniを使用してパスを見つけることができます!

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

0
gerald heng

Laravelは "root"シーダークラスを必要とします:

職人用ヘルプページを参照してください。

$ php artisan help db:seed   

Usage:
  db:seed [options]

Options:
      --class[=CLASS]        The class name of the root seeder [default: "DatabaseSeeder"]
      --database[=DATABASE]  The database connection to seed
      --force                Force the operation to run when in production.
  -h, --help                 Display this help message
  -q, --quiet                Do not output any message
  -V, --version              Display this application version
      --ansi                 Force ANSI output
      --no-ansi              Disable ANSI output
  -n, --no-interaction       Do not ask any interactive question
      --env[=ENV]            The environment the command should run under
  -v|vv|vvv, --verbose       Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  Seed the database with records

DatabaseSeederを削除したい場合は、--classオプションを使用してシーダークラスを定義する必要があります。

0
Aaron Schmied