2016-03-24 11 views
5

Im completamente nuovo per laravel e sto cercando di imparare a fare alcune cose basilari quindi per favore nuda con me .. Quindi sto provando un php artigianale di base db: seed dopo la migrazione il mio database, ma continua a tornare l'errore titolo in cmd - [ReflectionException] 'UserTableSeeder' Classe non esisteClasse 'UserTableSeeder' non esiste - Laravel 5.0 [php artisan db: seed]

cose che ho cercato

  • Cambiare lo spazio dei nomi del 'UserTableSeeder.php Spazio dei nomi 'File' Database \ semi; ' e 'usa Database \ seeds \ UserTableSeeder;' nel file 'DatabaseSeeder.php'

di seguito riportate le migrazioni

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

    class CreateUsersTable extends Migration { 

     /** 
     * Run the migrations. 
     * 
     * @return void 
     */ 
     public function up() 
     { 
      Schema::create('users', function(Blueprint $table) 
      { 
       $table->increments('id'); 
       $table->string('name'); 
       $table->string('email')->unique(); 
       $table->string('password', 60); 
       $table->rememberToken(); 
       $table->timestamps(); 
      }); 
     } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('users'); 
    } 
} 

seguito è riportato l'UserTableSeeder.php

<?php 
use App\User; 
use Illuminate\Database\Seeder; 

class UserTableSeeder extends Seeder { 

    public function run() 
    { 
     DB::table('users')->delete(); 

     User::create(['email' => '[email protected]']); 
    } 
} 

seguito è riportato il 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('UserTableSeeder'); 
    } 
} 
+0

Hai provato a importare questo (UserTableSeeder) classe? – heavymetal91

risposta

23

Esegui composer dumpautoload dopo aver creato i file nei databas e/cartella.

Perché?

Controllare la sezione autoload composer.json e vedrete la cartella database/ viene caricato da "classmap" (source):

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

Il compositore docs descrivono classmap come:

Il classmap i riferimenti sono tutti combinati, durante l'installazione/aggiornamento, in una singola chiave => matrice di valori che può essere trovata nel file generato fornitore/compositore /autoload_classmap.php. Questa mappa viene creata scansionando per le classi in tutti i file .php e .inc nelle directory/file specificati.

È possibile utilizzare il supporto per la generazione di mappe per definire l'autoloading per tutte le librerie che non seguono PSR-0/4. Per configurare ciò, specificare tutte le directory o file per cercare le classi.

Enfasi aggiunta. È necessario eseguire il comando composer dumpautoload per generare una nuova classmap ogni volta che si aggiunge un file a database/, altrimenti non verrà caricato automaticamente.

La cartella app/, al contrario, utilizza lo standard PSR-4 per convertire un nome di classe completo in un percorso del file system. Questo è il motivo per cui non è necessario dumpautoload dopo aver aggiunto i file lì.

+0

Sei il migliore! Esso funziona magicamente. – brunoramonalmeida

8

Prova a cambiare

$this->call('UserTableSeeder'); 

a

$this->call(UserTableSeeder::class); 

e provare a eseguire

composer dump-autoload 
Problemi correlati