Wenn ich php artisan db: seed starte, wird folgende Fehlermeldung angezeigt:
[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);
}
}
composer dump-autoload
?SongsTableSeeder
Klassendefinition?Antworten:
Sie müssen die
SongsTableSeeder
DateiSongsTableSeeder.php
in demselben Verzeichnis ablegen, in dem Sie IhreDatabaseSeeder.php
Datei haben.Und Sie müssen in Ihrer Konsole laufen:
um eine neue Klassenzuordnung zu generieren und dann auszuführen:
Ich habe es gerade getestet. In Laravel 5 funktioniert es problemlos
quelle
composer dumpautoload
fliegt auchdump-autoload
die Liste aller Klassen neu, die in das Projekt aufgenommen werden müssen. Sie wird verwendet, wenn Sie eine neue Klasse in Ihrem Projekt haben. Normalerweise wird beim Ausführenmake:*
die neu erstellte Klasse hinzugefügt. Dies tritt jedoch nicht auf, wenn Sie manuell einen Seeder erstellen. Zumindest verstehe ich das so, dass es nach 5 Minuten Suche funktioniert. Ich bin kein Experte.composer dump-autoload
für mich gearbeitet.Ich habe es dadurch gelöst:
Dies geschah, weil ich den Dateinamen geändert habe. Ich weiß nicht, warum es nach der Änderung nicht funktioniert hat.
quelle
composer dump-autoload
funktioniert bei mir nicht. Ich muss die Seeder-Klasse neu erstellen, damit sie funktioniert.Die Datei SongsTableSeeder.php sollte sich im Verzeichnis database / seed oder in seinem Unterverzeichnis befinden.
Sie müssen ausführen:
und dann:
oder:
quelle
SongsTableSeeder.php sollte sich im Verzeichnis database / seed befinden
Konsolenbefehlsschritte:
und dann:
und dann:
und dann:
oder:
quelle
php artisan optimize
TeilIch verwende die neueste Laravel 5-Entwicklerversion. Wenn Sie den Namespace geändert haben, müssen Sie Ihre Seed-Klasse folgendermaßen aufrufen:
Natürlich müssen Sie durch
todoparrot
Ihren angegebenen Namespace ersetzen . Ansonsten erhalte ich den gleichen Fehler wie in der ursprünglichen Frage.quelle
Vergessen Sie nicht, dass die
composer dump-autoload
Arbeiten in Bezug auf den Autoload / Classmap-Abschnitt voncomposer.json
. Achten Sie darauf, wenn Sie das Seeders-Verzeichnis ändern oder mehrere Verzeichnisse zum Speichern von Seedern verwenden müssen.quelle
Wenn sich unser CustomTableSeeder im selben Verzeichnis wie DatabaseSeeder befindet, sollten wir Folgendes verwenden:
in unserer DatabaseSeeder-Datei; Dann wird ein weiterer Fehler ausgegeben, der besagt: 'DB-Klasse nicht gefunden'. Dann sollten wir unsere DB-Fassade wie folgt zu unserer CustomTableSeeder-Datei hinzufügen:
es hat bei mir funktioniert!
quelle
Ich habe nur SINGLE FILE mit ZWEI Klassen verwendet:
quelle
Wenn Sie die Seeders-Dateien aus einem anderen Projekt kopiert haben, müssen Sie den Befehl handwerker ausführen,
php artisan db:seed
da dies sonst in Ordnung ist.quelle
Ich habe
[ReflectionException] Class Seeder does not exist
auch und wenn ich benutzecomposer dump-autoload
, habe ich einen Fehler bekommen,preg_match(): JIT compilation failed: no more memory
wenn ich es laufen lasse.Was ich getan habe ist , dass ich ändern ,
;pcre.jit=1
umpcre.jit=Off
in php.ini ! Sie finden den Pfadphp --ini
in Ihrem Terminal!Ich benutze Mac mit PHP 7.3! Hoffe, das hilft einem von euch da draußen!
quelle
Sie geben wahrscheinlich die
.php
Erweiterung an und Ihre Klasse wurde nicht gefunden.Womit ich beschäftigt war :
Was mein Problem gelöst hat: Was ich tat:
quelle
Ich hatte den gleichen Fehler "Reflection Exception". Die Lösung bestand darin, die Klassendatei von dev für mich auf den Server zu kopieren. dummer Fehler, aber angesichts der Anzahl der Dateien, mit denen wir zu tun haben, kann man leicht vergessen, sie jedes Mal auf den Server zu kopieren.
quelle