Lorsque j'exécute php artisan db: seed , j'obtiens l'erreur suivante:
[ReflectionException] Class SongsTableSeeder does not exist
Que se passe-t-il?
Ma classe 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');
}
}
Ma classe 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
définition de classe?Réponses:
Vous devez mettre
SongsTableSeeder
en fichierSongsTableSeeder.php
dans le même répertoire où vous avez votreDatabaseSeeder.php
fichier.Et vous devez exécuter dans votre console:
pour générer une nouvelle carte de classe, puis exécutez:
Je viens de le tester. Cela fonctionne sans problème dans Laravel 5
la source
composer dumpautoload
vole égalementdump-autoload
régénère la liste de toutes les classes qui doivent être incluses dans le projet, elle est utilisée lorsque vous avez une nouvelle classe dans votre projet. Normalement, l'exécutionmake:*
ajoutera la classe nouvellement créée, mais cela ne se produira pas si vous créez manuellement un semoir. Du moins, c'est ainsi que je comprends que cela fonctionne à partir de 5 minutes de recherche. Je ne suis pas un expert.composer dump-autoload
j'ai travaillé pour moi.Je l'ai résolu en faisant ceci:
Cela s'est produit parce que j'ai modifié le nom du fichier. Je ne sais pas pourquoi cela n'a pas fonctionné après le changement.
la source
composer dump-autoload
ne fonctionne pas pour moi. Je dois recréer la classe de semoir pour le faire fonctionner.Le fichier SongsTableSeeder.php doit se trouver dans la base de données / graines répertoire ou dans son sous-répertoire.
Vous devez exécuter:
puis:
ou:
la source
SongsTableSeeder.php devrait être dans le répertoire database / seeds
Étapes de commande de la console:
puis:
puis:
puis:
ou:
la source
php artisan optimize
partieJ'utilise la toute dernière version de développement de Laravel 5, et si vous avez changé l'espace de noms, vous devrez appeler votre classe de départ comme ceci:
De toute évidence, vous devrez le remplacer
todoparrot
par votre espace de noms désigné. Sinon, je reçois la même erreur indiquée dans la question d'origine.la source
N'oubliez pas que les
composer dump-autoload
travaux en relation avec la section autoload / classmap decomposer.json
. Faites attention à cela si vous devez modifier le répertoire des seeders ou utiliser plusieurs répertoires pour stocker les seeders.la source
Si notre CustomTableSeeder se trouve dans le même répertoire que DatabaseSeeder, nous devons utiliser comme ci-dessous:
dans notre fichier DatabaseSeeder; alors une autre erreur sera lancée qui dit: 'DB Class not found' alors nous devrions ajouter notre façade DB à notre fichier CustomTableSeeder comme ci-dessous:
ça a marché pour moi!
la source
J'ai utilisé uniquement SINGLE FILE avec deux classes:
la source
Si vous avez copié les fichiers de départ de n'importe quel autre projet, vous devez exécuter la commande artisan
php artisan db:seed
sinon ça va.la source
j'ai
[ReflectionException] Class Seeder does not exist
trop et quand j'utilisecomposer dump-autoload
, j'ai une erreurpreg_match(): JIT compilation failed: no more memory
quand je l'exécute.Ce que je l'ai fait est que je change
;pcre.jit=1
pourpcre.jit=Off
en php.ini ! Vous pouvez trouver le chemin en utilisantphp --ini
dans votre terminal!J'utilise mac avec php 7.3! J'espère que cela aidera n'importe lequel d'entre vous!
la source
Vous spécifiez probablement le
.php
extension et il n'a pas trouvé votre classe.Ce que je faisais:
Ce qui a résolu mon problème: ce que je faisais:
la source
J'ai eu la même erreur "exception de réflexion". La solution était de copier le fichier de classe sur le serveur, depuis dev, pour moi. erreur stupide, mais étant donné le nombre de fichiers que nous traitons, il est facile d'oublier de les copier sur le serveur à chaque fois.
la source