template - layout laravel admin




Laravel 5-semente artesanal[ReflectionException] Classe SongsTableSeeder não existe (7)

Estou executando o mais recente lançamento do Laravel 5 dev, e se você mudou o namespace, você precisará chamar sua classe semente assim:

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

Obviamente, você precisará substituir o todoparrot pelo namespace designado. Caso contrário, recebo o mesmo erro indicado na pergunta original.

Quando eu executo php artisan db: seed estou recebendo o seguinte erro:

[ReflectionException] Class SongsTableSeeder does not exist

O que está acontecendo?

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

}

Minha classe SongsTableSeeder:

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

    }

}

Eu resolvi isso fazendo isso:

  1. Copie o conteúdo do arquivo.
  2. Remover arquivo.
  3. Executar comando: php artisan make: semeador.
  4. Copie o conteúdo do arquivo de volta neste arquivo.

Isso aconteceu porque fiz uma alteração no nome do arquivo. Eu não sei porque não funcionou após a mudança.


Eu usei apenas SINGLE FILE com duas classes na seguinte:

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)]);

    }

}

}

Não se esqueça que o composer dump-autoload funciona em relação à seção autoload / classmap do composer.json . Tome cuidado com isso se precisar alterar o diretório seeders ou usar vários diretórios para armazenar seeders.

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

Se o nosso CustomTableSeeder estiver no mesmo diretório do DatabaseSeeder, devemos usar como abaixo:

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

no nosso arquivo DatabaseSeeder; Em seguida, outro erro será lançado dizendo: 'Classe DB não encontrada', então devemos adicionar nossa fachada DB ao nosso arquivo CustomTableSeeder como abaixo:

use Illuminate\Support\Facades\DB;

funcionou para mim!


Se você copiou os arquivos seeders de qualquer outro projeto, então você precisa executar o comando php artisan db:seed caso contrário, tudo bem.


Você precisa colocar SongsTableSeeder no arquivo SongsTableSeeder.php no mesmo diretório onde você tem o seu arquivo DatabaseSeeder.php .

E você precisa rodar no seu console:

composer dump-autoload

para gerar um novo mapa de classes e depois executar:

php artisan db:seed

Eu acabei de testar. Está funcionando sem problema no Laravel 5