J'ai ce DatabaseSeeder.php:
<?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('MemberInvitationSeeder');
}
}
J'ai ce fichier MemberInvitationSeeder.php, frère du fichier DatabaseSeeder.php
<?php
use Illuminate\Database\Seeder;
use App\MemberInvitation;
class MemberInvitationSeeder extends Seeder {
public function run()
{
MemberInvitation::truncate();
MemberInvitation::create( [
'id' => 'BlahBlah' ,//com_create_guid(),
'partner_id' => 1,
'fisrt_name' => 'Thats',
'last_name' => 'Me',
'email' => '[email protected]',
'mobile_phone' => '444-342-4234',
'created_at' => new DateTime
] );
}
}
Maintenant j'appelle
php artisan db:seed
et je reçois:
[ReflectionException]
Class MemberInvitationSeeder does not exist
J'ai essayé tout ce que je pouvais trouver, y compris "composer dump-autoload". en vain. Qu'est-ce que je fais mal?
Je crois que je connais la raison maintenant.
La nouvelle classe MemberInvitationSeeder ne figurait pas dans les classes à chargement automatique du fichier composer.json.
Ce n'était pas là parce que j'ai ajouté cette classe manuellement.
Maintenant, si j'ajoute encore de telles classes, que dois-je utiliser pour que ma classe passe automatiquement à l'autoloader?
Première étape - générer des graines:
php artisan make:seed MemberInvitationSeeder
Deuxième étape - Dans DatabaseSeeder.php, ajoutez une ligne:
$this->call(MemberInvitationSeeder::class);
Troisième étape :
composer dump-autoload
Quatrième étape :
php artisan db:seed
Cela devrait marcher
Si ce n'est pas l'indice, vérifiez le fichier composer.json et assurez-vous que ce code est bien dans la section "autoload":
"classmap": [
"database"
],
J'ai résolu ce problème en ajoutant la classe au fichier Seeder, avec l'instruction use
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
Si les solutions ci-dessus ne fonctionnent pas, essayez celle-ci. Vous avez peut-être modifié l'espace de nom (par défaut, il s'agit de "App"). Ce que vous devez faire est d'aller au composer.json
déposer et vérifier ceci:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
Si l'espace de nom est comme dans cet exemple, cette solution n'est pas pour vous.
Sinon, prenez l'espace de noms que vous avez trouvé et insérez cette ligne dans votre classe de division:
use NameSpaceFound\User;