web-dev-qa-db-fra.com

Laravel 5 - graine artisanale [ReflectionException] La classe SongsTableSeeder n'existe pas

Quand je lance php artisan db: seed j'obtiens le message d'erreur suivant: 

[ReflectionException] Class SongsTableSeeder does not exist

Que se passe-t-il?

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

}

My SongsTableSeeder class:

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

Vous devez placer SongsTableSeeder dans le fichier SongsTableSeeder.php dans le même répertoire que celui où se trouve votre fichier DatabaseSeeder.php.

Et vous devez exécuter dans votre console:

composer dump-autoload

pour générer une nouvelle carte de classe puis exécuter:

php artisan db:seed

Je viens de le tester. Cela fonctionne sans problème dans Laravel 5

520
Marcin Nabiałek

Je l'ai résolu en faisant ceci:

  1. Copiez le contenu du fichier.
  2. Effacer le fichier.
  3. Exécuter la commande: php artisan make: seeder.
  4. Copiez le contenu du fichier dans ce fichier.

Cela est dû au fait que j'ai modifié le nom du fichier. Je ne sais pas pourquoi cela n'a pas fonctionné après le changement.

16
Ron van Asseldonk

Fichier SongsTableSeeder.php devrait se trouver dans le répertoire database/seed ou son sous-répertoire.

Vous devez courir:

composer dump-autoload

et alors:

php artisan db:seed

ou:

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

J'utilise la dernière version de Laravel 5 dev, et si vous avez modifié le namespace, vous devez appeler votre classe de départ de la manière suivante:

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

De toute évidence, vous devrez remplacer todoparrot par votre espace de noms désigné. Sinon, je reçois la même erreur que celle indiquée dans la question d'origine.

3
Jason

Ne pas oublier que le composer dump-autoload fonctionne en relation avec le chargement automatique Section/classmap de composer.json. Faites attention à cela si vous avez besoin de changer de répertoire de départ ou d’utiliser plusieurs répertoires pour stocker les dossiers de départ.

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

SongsTableSeeder.php devrait être dans le répertoire database/seed 

Étapes de la commande de console:

composer dump-autoload

et alors:

php artisan cache:clear

et alors:

php artisan optimize

et alors:

php artisan db:seed

ou:

php artisan db:seed --class=SongsTableSeeder
1
Chandrakant Ganji

Si notre CustomTableSeeder est dans le même répertoire que DatabaseSeeder, nous devrions utiliser comme ci-dessous:

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

dans notre fichier DatabaseSeeder; une autre erreur sera alors générée, indiquant: 'Classe de base de données non trouvée' nous devrions alors ajouter notre façade de base de données à notre fichier CustomTableSeeder comme ci-dessous: 

use Illuminate\Support\Facades\DB;

cela a fonctionné pour moi!

0
ivahidmontazer

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 cela va.

0
Shahid Hussain

J'ai utilisé uniquement SINGLE FILE avec deux classes dans:

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

j'ai aussi [ReflectionException] Class Seeder does not exist aussi et quand j'utilise composer dump-autoload, j'ai une erreur preg_match(): JIT compilation failed: no more memory quand je l'exécute.

Qu'est-ce que j'ai fait est que je change ;pcre.jit=1 en pcre.jit=Off dans php.ini! Vous pouvez trouver le chemin en utilisant php --ini dans votre terminal!

J'utilise mac avec PHP 7.3! J'espère que cela aidera l'un d'entre vous!

0
gerald heng

Laravel nécessite une classe de semoir "racine":

Voir la page d'aide de l'artisan:

$ 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

Si vous souhaitez supprimer DatabaseSeeder, vous devez définir la classe de segmentation avec l'option --class.

0
Aaron Schmied