【问题标题】:Laravel 5 Seeder Class Does Not ExistLaravel 5 Seeder 类不存在
【发布时间】:2017-11-17 02:08:44
【问题描述】:

我有一个全新的 Laravel 安装。我已经从一个 Laravel 项目的 github 存储库中转移了代码,版本相同 (5.3)。

一切正常,但由于某种原因数据库种子无法运行。

例如,我可以在新的 Laravel 安装中从 github 加载的迁移中迁移,就像我在最初将迁移推送到 github 的服务器上一样。

但我不能php artisan db:seed,这意味着我美丽的小数据库是空的! >:(

我得到:ReflectionException 类不存在

我尝试过的:

  1. php artisan optimize
  2. php artisan clear:cache
  3. composer clearcache
  4. composer dump-autoload

这些都没有解决我的问题。 DatabaseSeeder 中的所有内容都拼写正确,并且类 - 确实存在,它们在我的其他服务器上工作正常,而且,由于 Github,这个全新安装现在具有与我的原始服务器相同的所有文件。

DatabaseSeeder.php:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }
}

编辑 - 堆栈跟踪:

2017-06-14 19:11:00] local.ERROR: ReflectionException: Class UserTablesSeeder does not exist in /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:749
Stack trace:
#0 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(749): ReflectionClass->__construct('UserTablesSeede...')
#1 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(644): Illuminate\Container\Container->build('UserTablesSeede...', Array)
#2 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(709): Illuminate\Container\Container->make('UserTablesSeede...', Array)
#3 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Seeder.php(55): Illuminate\Foundation\Application->make('UserTablesSeede...')
#4 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Seeder.php(43): Illuminate\Database\Seeder->resolve('UserTablesSeede...')
#5 /var/www/laravel/database/seeds/DatabaseSeeder.php(14): Illuminate\Database\Seeder->call('UserTablesSeede...')
#6 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php(63): DatabaseSeeder->run()
#7 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2292): Illuminate\Database\Console\Seeds\SeedCommand->Illuminate\Database\Console\Seeds\{closure}()
#8 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php(64): Illuminate\Database\Eloquent\Model::unguarded(Object(Closure))
#9 [internal function]: Illuminate\Database\Console\Seeds\SeedCommand->fire()
#10 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(508): call_user_func_array(Array, Array)
#11 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)
#12 /var/www/laravel/vendor/symfony/console/Command/Command.php(261): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /var/www/laravel/vendor/symfony/console/Application.php(817): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 /var/www/laravel/vendor/symfony/console/Application.php(185): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Database\Console\Seeds\SeedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 /var/www/laravel/vendor/symfony/console/Application.php(116): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 /var/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 /var/www/laravel/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 {main}  

【问题讨论】:

  • 你做过数据库播种机吗?
  • 如果是,请提供该代码
  • @Derek 代码添加
  • 抱歉,我的意思是UserTableSeeder 代码
  • UserTablesSeeder vs UserTableSeeder,表格 vs 表格

标签: php laravel-5 composer-php


【解决方案1】:

尝试运行

composer dump-autoload

尤其是如果您最近编辑了播种器文件的名称

【讨论】:

  • 谢谢!这比任何其他方法都好。这应该是公认的答案。
【解决方案2】:

我选择了一个单独的类来解决这个问题:

php artisan db:seed --class=UserTableSeeder

相对于db:seed 没有任何参数,但是我仍然想知道为什么我必须这样做。

同样,我的代码中没有UserTablesSeederanywhere,所以我不确定为什么日志显示这是种子尝试,而我从未声明过。

Table 中没有s 总是UserTableSeeder

编辑:现在我的自定义中间件不起作用...似乎是全新安装不喜欢来自 github 的一些新代码的问题...如果有人可以提供我很乐意接受更好的答案。

【讨论】:

  • 仍然可能是作曲家的问题。完全删除供应商目录和 composer.lock 文件。之后再次运行作曲家进行全新安装。如果可以,请在自动加载文件中的某处检查供应商/作曲家目录和 grep 以获取 UserTables。
  • @Robert Okay 会试试这个并回复你。我将直接从 github 安装并拉取,看看是否能发现任何问题。感谢您的帮助。
  • 我现在遇到了这个问题。知道答案吗?
  • 很奇怪。当我运行php artisan db:seed --env=testing 时,我得到了Class UsersTableSeeder does not exist,所以我运行了php artisan make:seeder UsersTableSeeder,但得到了Seeder already exists!。奇怪。我删除了文件,然后重新运行了 maker,现在一切正常。
【解决方案3】:

对于 Laravel 6.0,正在更改

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

$this->call('UserTableSeeder');

为我做了诀窍。

【讨论】:

  • 在哪里更改
【解决方案4】:

我删除了种子文件并重新制作,一切正常。

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2015-12-14
    相关资源
    最近更新 更多