web-dev-qa-db-fra.com

Laravel 5: DB Seed classe non trouvée

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?

15
JasonGenX

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?

0
JasonGenX

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"
],
46

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;
4
entoniperez

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;
0
iahmedbacha