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);
}
}
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
Ich habe es dadurch gelöst:
Dies geschah, weil ich den Dateinamen geändert hatte. Ich weiß nicht, warum es nach der Änderung nicht funktioniert hat.
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
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.
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"
],
},
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
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!
Wenn Sie die Seederdateien aus einem anderen Projekt kopiert haben, müssen Sie den Handwerkerbefehl php artisan db:seed
ausführen.
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)]);
}
}
}
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!
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.