Laravel 5 - 工匠种子[ReflectionException]类SongsTableSeeder不存在
当我运行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);
}
}
你需要把SongsTableSeeder
到文件SongsTableSeeder.php
在你有你的DatabaseSeeder.php
文件同一目录下。
而你需要在控制台上运行:
composer dump-autoload
产生新的类映射,然后运行:
php artisan db:seed
我只是测试它。它的工作没有问题Laravel 5
不适合我,仍然得到'反射例外'。 – KillABug 2015-03-31 09:17:57
我也是。这太令人沮丧了。 – 2015-05-09 16:42:41
我没有在我的播种班上使用模型。现在工作正常。 – 2015-05-09 16:46:38
我运行了最新的Laravel 5开发版,如果你已经改变了命名空间,你需要打电话给你的种子类是这样的:
$this->call('\todoparrot\TodolistTableSeeder');
显然你需要用你指定的命名空间替换todoparrot
。否则,我会收到原始问题中指出的相同错误。
如果我们CustomTableSeeder是同一个目录DatabaseSeeder我们应该使用如下:
$this->call('database\seeds\CustomTableSeeder');
我们DatabaseSeeder文件
; 那么另一个错误会被发出,说:“DB类没有发现” 那么,我们应该我们的DB门面添加到我们的CustomTableSeeder文件象下面这样:
use Illuminate\Support\Facades\DB;
它为我工作!
我只用单个文件有以下两类它:
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)]);
}
}
}
我有同样的“反射异常”错误。解决的办法是将类文件从dev中复制到服务器上。愚蠢的错误,但鉴于我们处理了多少个文件,每次都很容易忘记将它们复制到服务器上。
我解决它通过这样做:
- 复制文件内容。
- 删除文件。
- 运行命令:php artisan make:seeder。
- 将文件内容复制回此文件中。
发生这种情况是因为我对文件名进行了更改。我不知道为什么改变后它不起作用。
可能运行composer dump-auto会更容易。 自动加载器现在正在查找较旧的文件。所以如果你通过命令行转储这个文件,它将会用新文件生成一个新的自动加载器文件。 所以在未来尝试这= = – 2016-04-06 13:51:49
有关作曲家自动装载机的更多信息,请参阅本网站: https://getcomposer.org/doc/01-basic-usage.md#autoloading – 2016-04-06 14:31:29
van Asseldok,好吧,'作曲家转储-autoload'不适用于我。我必须重新创建播种类以使其工作。 – 2017-11-10 09:24:38
文件SongsTableSeeder.php应该在数据库/种子目录或在其子目录中。
你需要运行:
composer dump-autoload
然后:
php artisan db:seed
或:
php artisan db:seed --class=SongsTableSeeder
能够看到**解析错误**'php artisan db:seed --class = SongsTableSeeder'命令。 thnks! – Omi 2017-10-18 07:09:58
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
选项定义播种器类。
'composer dump-autoload'? – 2014-10-01 14:09:01
我认为**使用Faker \ Factory作为Faker; **正在做这项工作? – Sasha 2014-10-01 14:18:22
包含'SongsTableSeeder'类定义的文件的路径是什么? – 2014-10-01 14:43:35