Laravel 5 数据填充

6

我正在按照《Laravel 5 Essentials》中的教程进行操作。当我尝试使用命令

php artisan db:seed

来填充我的数据库时,我收到了以下错误提示:

[ReflectionException]
  Class BreedsTableSeeder does not exist

BreedsTableSeeder的代码如下所示:

<?

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class BreedsTableSeeder extends Seeder {

    public function run() 
    {
        DB:table('breeds')->insert([
        ['id' => 1, 'name' => "Domestic"],
        ['id' => 2, 'name' => "Persian"],
        ['id' => 3, 'name' => "Siamese"],
        ['id' => 4, 'name' => "Abyssinian"],
        ]);
    }
}

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(UserTableSeeder::class);
        $this->call('BreedsTableSeeder');
    }
}

我注意到在Sublime加载示例代码时,“DB”有不同的颜色,这让我怀疑它与DB命名空间有关。由于我是Laravel的新手,我不确定DB应该在哪里定义。
我还尝试执行:
composer dump-autoload

但是那并没有起作用。有人知道如何解决这个问题吗?谢谢!


BreedsTableSeeder的文件名是什么? - yangqi
你尝试过使用composer dump-autoload吗?你的BreedsTableSeeder文件在哪里? - Jeremy D
在你重命名了拼写错误的文件名之后,执行 composer dump-autoload 应该可以解决这个错误。 - user2094178
2
希望您喜欢这本书 :) 尝试在创建种子类之后卸载自动加载器。它在捕捉新创建的种子类方面有点不稳定。 - Martin Bean
@MartinBean 这本书非常有帮助!我很惊讶你找到了这篇文章并抽出时间回复! - jstein
显示剩余2条评论
3个回答

6

尝试:

php artisan make:seeder BreedsTableSeeder

详细信息可以在Laravel种子中找到。


删除Seeder后,运行Laravel内置命令php artisan db:seed,未出现任何错误。php artisan make:seeder命令会执行我手动创建的seeder文件所没有做到的功能是什么? - jstein
我遇到了同样的错误,不知道为什么,但当你通过artisan进行迁移时,它就可以正常工作。 - Miharbi Hernandez
这样做的原因是先生成文件,然后运行composer dump-autoload。 - Bill Garrison

0

你只需要在BreedsTableSeeder文件的顶部添加use Illuminate\Support\Facades\DB;即可。


0

有几件事情:

  1. 听起来你的seeder类由于某些原因没有被添加到classmap中。检查的地方是/vendor/composer/autoload_classmap.php文件。如果你在里面看到了你的类,它应该可以工作。如果没有,那么可能是名称更改或其他问题在某个时候出错了,你可能需要手动添加。

  2. 你需要为DB类添加命名空间。应该是:

    use Illuminate\Support\Facades\DB;


感谢您的快速反馈。我已经检查了autoload_classmap.php,但是该类并未列出。我还添加了"use Illuminate\Support\Facades\DB",但仍然出现相同的错误。 - jstein
我认为您需要完全限定BreedsTableSeeder的名称。它可能应该是:$this->call('database\seeds\BreedsTableSeeder')。 - Jimmy Zoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接