2014-10-01 60 views
136

当我运行PHP 工匠DB:种子我收到以下错误:Laravel 5 - 工匠种子[ReflectionException]类SongsTableSeeder不存在

[ReflectionException] Class SongsTableSeeder does not exist 

这是怎么回事?

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

} 

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

    } 

} 
+40

'composer dump-autoload'? – 2014-10-01 14:09:01

+0

我认为**使用Faker \ Factory作为Faker; **正在做这项工作? – Sasha 2014-10-01 14:18:22

+0

包含'SongsTableSeeder'类定义的文件的路径是什么? – 2014-10-01 14:43:35

回答

370

你需要把SongsTableSeeder到文件SongsTableSeeder.php在你有你的DatabaseSeeder.php文件同一目录下。

而你需要在控制台上运行:

composer dump-autoload 

产生新的类映射,然后运行:

php artisan db:seed 

我只是测试它。它的工作没有问题Laravel 5

+3

不适合我,仍然得到'反射例外'。 – KillABug 2015-03-31 09:17:57

+1

我也是。这太令人沮丧了。 – 2015-05-09 16:42:41

+1

我没有在我的播种班上使用模型。现在工作正常。 – 2015-05-09 16:46:38

3

我运行了最新的Laravel 5开发版,如果你已经改变了命名空间,你需要打电话给你的种子类是这样的:

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

显然你需要用你指定的命名空间替换todoparrot。否则,我会收到原始问题中指出的相同错误。

0

如果我们CustomTableSeeder是同一个目录DatabaseSeeder我们应该使用如下:

$this->call('database\seeds\CustomTableSeeder'); 
我们DatabaseSeeder文件

; 那么另一个错误会被发出,说:“DB类没有发现” 那么,我们应该我们的DB门面添加到我们的CustomTableSeeder文件象下面这样:

use Illuminate\Support\Facades\DB; 

它为我工作!

0

我只用单个文件有以下两类它:

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

    } 

} 

} 
0

我有同样的“反射异常”错误。解决的办法是将类文件从dev中复制到服务器上。愚蠢的错误,但鉴于我们处理了多少个文件,每次都很容易忘记将它们复制到服务器上。

10

我解决它通过这样做:

  1. 复制文件内容。
  2. 删除文件。
  3. 运行命令:php artisan make:seeder。
  4. 将文件内容复制回此文件中。

发生这种情况是因为我对文件名进行了更改。我不知道为什么改变后它不起作用。

+1

可能运行composer dump-auto会更容易。 自动加载器现在正在查找较旧的文件。所以如果你通过命令行转储这个文件,它将会用新文件生成一个新的自动加载器文件。 所以在未来尝试这= = – 2016-04-06 13:51:49

+0

有关作曲家自动装载机的更多信息,请参阅本网站: https://getcomposer.org/doc/01-basic-usage.md#autoloading – 2016-04-06 14:31:29

+0

van Asseldok,好吧,'作曲家转储-autoload'不适用于我。我必须重新创建播种类以使其工作。 – 2017-11-10 09:24:38

5

文件SongsTableSeeder.php应该在数据库/种子目录或在其子目录中。

你需要运行:

composer dump-autoload 

然后:

php artisan db:seed 

或:

php artisan db:seed --class=SongsTableSeeder 
+1

能够看到**解析错误**'php artisan db:seed --class = SongsTableSeeder'命令。 thnks! – Omi 2017-10-18 07:09:58

0

Laravel需要一个 “根” 播种机类:

见工匠帮助页面:

$ 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 

如果要删除DatabaseSeeder,则必须使用--class选项定义播种器类。

相关问题