it-swarm.com.de

Laravel 5 - Handwerker-Samen [ReflectionException] Klasse SongsTableSeeder ist nicht vorhanden

Wenn ich php artisan db: seed starte, erhalte ich die folgende Fehlermeldung: 

[ReflectionException] Class SongsTableSeeder does not exist

Was ist los?

Meine DatabaseSeeder-Klasse:

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

}

Meine SongsTableSeeder-Klasse:

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

    }

}
183
Sasha

Sie müssen SongsTableSeeder in die Datei SongsTableSeeder.php in demselben Verzeichnis ablegen, in dem sich Ihre DatabaseSeeder.php-Datei befindet.

Und Sie müssen in Ihrer Konsole laufen:

composer dump-autoload

um eine neue Klassenzuordnung zu generieren und dann auszuführen:

php artisan db:seed

Ich habe es gerade getestet. In Laravel 5 funktioniert es problemlos

520

Ich habe es dadurch gelöst:

  1. Kopieren Sie den Dateiinhalt.
  2. Datei löschen.
  3. Führen Sie den Befehl aus: PHP Handwerker machen: Sämaschine.
  4. Kopieren Sie den Dateiinhalt zurück in diese Datei.

Dies geschah, weil ich den Dateinamen geändert hatte. Ich weiß nicht, warum es nach der Änderung nicht funktioniert hat.

16

Die Datei SongsTableSeeder.php sollte sich im Verzeichnis database/seeds oder im Unterverzeichnis befinden.

Du musst laufen:

composer dump-autoload

und dann:

php artisan db:seed

oder:

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

Ich verwende die neueste Version von Laravel 5 dev. Wenn Sie den Namespace geändert haben, müssen Sie Ihre Seed-Klasse folgendermaßen nennen:

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

Offensichtlich müssen Sie todoparrot durch Ihren angegebenen Namespace ersetzen. Ansonsten erhalte ich dieselbe Fehlermeldung wie in der ursprünglichen Frage.

3
Jason

Vergessen Sie nicht, dass der composer dump-autoload in Verbindung mit dem Autoload funktioniert /classmap-Abschnitt von composer.json. Achten Sie darauf, wenn Sie das Setzerverzeichnis ändern müssen oder mehrere Verzeichnisse zum Speichern von Setzern verwenden.

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

SongsTableSeeder.php sollte sich im Datenbank-/Seeds-Verzeichnis befinden 

Konsolenbefehlsschritte:

composer dump-autoload

und dann:

php artisan cache:clear

und dann:

php artisan optimize

und dann:

php artisan db:seed

oder:

php artisan db:seed --class=SongsTableSeeder
1

Wenn sich unser CustomTableSeeder im selben Verzeichnis wie DatabaseSeeder befindet, sollten wir wie folgt verwenden:

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

in unserer DatabaseSeeder-Datei; wird ein weiterer Fehler ausgegeben: "DB-Klasse nicht gefunden" Dann sollten wir unsere DB-Fassade in unsere CustomTableSeeder-Datei einfügen (siehe unten): 

use Illuminate\Support\Facades\DB;

es hat für mich funktioniert!

0
ivahidmontazer

Wenn Sie die Seederdateien aus einem anderen Projekt kopiert haben, müssen Sie den Handwerkerbefehl php artisan db:seed ausführen.

0
Shahid Hussain

Ich habe nur EINZELDATEI mit ZWEI Klassen verwendet:

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

ich habe auch [ReflectionException] Class Seeder does not exist und wenn ich composer dump-autoload verwende, bekomme ich eine Fehlermeldung preg_match(): JIT compilation failed: no more memory, wenn ich es starte.

Was ich getan habe, ist, dass ich ;pcre.jit=1 in pcre.jit=Off in php.ini ändere! Sie finden den Pfad mit php --ini in Ihrem Terminal!

Ich benutze Mac mit PHP 7.3! Hoffe, dass jemand von euch da draußen hilft!

0
gerald heng

Laravel benötigt eine "root" Sämaschine:

Siehe die Hilfeseite für Handwerker:

$ 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

Wenn Sie den DatabaseSeeder löschen möchten, müssen Sie die Seeder-Klasse mit der Option --class definieren.

0
Aaron Schmied