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);
}
}
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
Je l'ai résolu en faisant ceci:
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.
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
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.
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"
],
},
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
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!
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.
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)]);
}
}
}
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!
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
.