Po uruchomieniu db php artisan db: seed otrzymuję następujący błąd:
[ReflectionException] Class SongsTableSeeder does not exist
Co się dzieje?
Moja klasa 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');
}
}
Klasa My 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);
}
}
composer dump-autoload
?SongsTableSeeder
definicję klasy?Odpowiedzi:
Musisz umieścić
SongsTableSeeder
w plikuSongsTableSeeder.php
w tym samym katalogu, w którym znajduje sięDatabaseSeeder.php
plik.Musisz uruchomić w konsoli:
aby wygenerować nową mapę klas, a następnie uruchomić:
Właśnie to przetestowałem. Działa bez problemu w Laravel 5
źródło
composer dumpautoload
lata takżedump-autoload
listę wszystkich klas, które muszą zostać uwzględnione w projekcie, jest używana, gdy masz nową klasę w swoim projekcie. Normalnie działającymake:*
doda nowo utworzoną klasę, ale nie stanie się to, jeśli ręcznie utworzysz siewnik. Przynajmniej tak to rozumiem, że działa od 5 minut wyszukiwania. Nie jestem ekspertem.composer dump-autoload
pracowałem dla siebie.Rozwiązałem to, robiąc to:
Stało się tak, ponieważ zmieniłem nazwę pliku. Nie wiem, dlaczego to nie zadziałało po zmianie.
źródło
composer dump-autoload
nie działa dla mnie. Muszę odtworzyć klasę siewnika, aby działała.Plik SongsTableSeeder.php powinien znajdować się w katalogu database / seeds lub w jego podkatalogu.
Musisz uruchomić:
i wtedy:
lub:
źródło
SongsTableSeeder.php powinien znajdować się w katalogu database / seeds
Kroki polecenia konsoli:
i wtedy:
i wtedy:
i wtedy:
lub:
źródło
php artisan optimize
częśćKorzystam z najnowszej wersji dewelopera Laravel 5, a jeśli zmieniłeś przestrzeń nazw, musisz wywołać klasę seed w następujący sposób:
Oczywiście musisz zastąpić
todoparrot
wyznaczoną przestrzenią nazw. W przeciwnym razie otrzymuję ten sam błąd wskazany w pierwotnym pytaniu.źródło
Nie
composer dump-autoload
zapomnij, że działa w związku z sekcją autoload / classmapcomposer.json
. Uważaj na to, jeśli musisz zmienić katalog seederów lub użyć wielu katalogów do przechowywania seederów.źródło
Jeśli nasz CustomTableSeeder znajduje się w tym samym katalogu co DatabaseSeeder, powinniśmy użyć jak poniżej:
w naszym pliku DatabaseSeeder; wtedy zostanie zgłoszony kolejny błąd, który mówi: „Nie znaleziono klasy DB”, wtedy powinniśmy dodać naszą fasadę DB do naszego pliku CustomTableSeeder, jak poniżej:
zadziałało dla mnie!
źródło
Użyłem tylko POJEDYNCZEGO PLIKU z DWOMA klasami:
źródło
Jeśli skopiowałeś pliki inicjujące z innego projektu, musisz uruchomić polecenie rzemieślnika, w
php artisan db:seed
przeciwnym razie będzie to w porządku.źródło
[ReflectionException] Class Seeder does not exist
też mam i kiedy używamcomposer dump-autoload
, mam błąd,preg_match(): JIT compilation failed: no more memory
kiedy go uruchamiam.Co zrobiłem jest to, że zmieniają
;pcre.jit=1
siępcre.jit=Off
w php.ini ! Możesz znaleźć ścieżkę, używającphp --ini
w swoim terminalu!Używam Mac z php 7.3! Mam nadzieję, że pomoże wam któryś z was!
źródło
Prawdopodobnie określasz
.php
rozszerzenie i nie znalazłeś swojej klasy.Co ja robiłem :
Co rozwiązało mój problem: Co robiłem:
źródło
Miałem ten sam błąd „wyjątku odbicia”. Rozwiązaniem było dla mnie skopiowanie pliku klasy na serwer z dev. głupi błąd, ale biorąc pod uwagę liczbę plików, z którymi mamy do czynienia, łatwo zapomnieć o ich skopiowaniu na serwer za każdym razem.
źródło