【问题标题】:Laravel 4 migrations - class not foundLaravel 4 迁移 - 找不到类
【发布时间】:2012-12-13 17:21:36
【问题描述】:

这个问题现在已经解决了 - 我使用了以下内容:

而且,多亏了 IRC,问题才得以解决。我被告知要跑

php composer.phar dump-autoload

这解决了我的问题。这可能与我奇怪的 Composer 设置有关。


我刚刚开始使用 Laravel 4 为一个可能的未来项目,来自 Laravel 3。我开始创建一个新的迁移,使用 artisan 的 create_blogs_table:

php artisan migrate:make create_blogs_table --table=blogs --create

这生成了基本的迁移文件结构,然后我又填写了一些内容:

<?php

use Illuminate\Database\Migrations\Migration;

class CreateBlogsTable extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('blogs', function($table)
        {
            $table->increments('id');
            $table->string('title');
            $table->text('description')->nullable();
            $table->integer('user_id')->unsigned();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('blogs');
    }
}

我现在尝试再次使用 artisan 运行此迁移:

php artisan migrate --env=local

*注意我为具有 .dev 扩展名的域设置了本地数据库连接

以前这可以正常工作(在 Laravel 3 中)但使用 Illuminate 我会收到此错误:

PHP Fatal error:  Class 'CreateBlogsTable' not found in /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php on line 301
PHP Stack trace:
PHP   1. {main}() /var/www/gamingsite/artisan:0
PHP   2. Symfony\Component\Console\Application->run() /var/www/gamingsite/artisan:57
PHP   3. Symfony\Component\Console\Application->doRun() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Application.php:106
PHP   4. Illuminate\Console\Command->run() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Application.php:193
PHP   5. Symfony\Component\Console\Command\Command->run() /var/www/gamingsite/vendor/illuminate/console/src/Illuminate/Console/Command.php:95
PHP   6. Illuminate\Console\Command->execute() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:240
PHP   7. Illuminate\Database\Console\Migrations\MigrateCommand->fire() /var/www/gamingsite/vendor/illuminate/console/src/Illuminate/Console/Command.php:107
PHP   8. Illuminate\Database\Migrations\Migrator->run() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:69
PHP   9. Illuminate\Database\Migrations\Migrator->runMigrationList() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:75
PHP  10. Illuminate\Database\Migrations\Migrator->runUp() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:106
PHP  11. Illuminate\Database\Migrations\Migrator->resolve() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:125
PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/gamingsite/app/start/../storage/logs/log-2012-12-28.txt" could not be opened: failed to open stream: Permission denied' in /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:71
Stack trace:
#0 /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(77): Monolog\Handler\StreamHandler->write(Array)
#1 /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\RotatingFileHandler->write(Array)
#2 /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Logger.php(214): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#3 /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Logger.php(278): Monolog\Logger->addRecord(400, Object(Symfony\Component\HttpKernel\Exception\FatalErrorException), Array)
#4 [internal function]: Monolog\Logger->addError(Object(Symfony\Component\HttpKernel\Exception\FatalErrorExcepti in /var/www/gamingsite/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 71
PHP Stack trace:
PHP   1. {main}() /var/www/gamingsite/artisan:0
PHP   2. Symfony\Component\Console\Application->run() /var/www/gamingsite/artisan:57
PHP   3. Symfony\Component\Console\Application->doRun() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Application.php:106
PHP   4. Illuminate\Console\Command->run() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Application.php:193
PHP   5. Symfony\Component\Console\Command\Command->run() /var/www/gamingsite/vendor/illuminate/console/src/Illuminate/Console/Command.php:95
PHP   6. Illuminate\Console\Command->execute() /var/www/gamingsite/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:240
PHP   7. Illuminate\Database\Console\Migrations\MigrateCommand->fire() /var/www/gamingsite/vendor/illuminate/console/src/Illuminate/Console/Command.php:107
PHP   8. Illuminate\Database\Migrations\Migrator->run() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:69
PHP   9. Illuminate\Database\Migrations\Migrator->runMigrationList() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:75
PHP  10. Illuminate\Database\Migrations\Migrator->runUp() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:106
PHP  11. Illuminate\Database\Migrations\Migrator->resolve() /var/www/gamingsite/vendor/illuminate/database/src/Illuminate/Database/Migrations/Migrator.php:125

我已经检查过了,database/migrations/ 文件夹肯定会被自动加载。我不知道这个问题的原因可能是什么。在 IRC 上询问并在 Google 上搜索后,我仍然完全一无所知,所以希望有人可以在这里帮助我。

提前致谢!

【问题讨论】:

    标签: migration laravel


    【解决方案1】:

    我在 xubuntu 上遇到了这个错误,并用 sudo composer dump-autoload 修复了它

    【讨论】:

      【解决方案2】:

      在 Laravel 4 (illuminate) 迁移类中不需要你设置无符号方法。你可以试试这个。

        class CreateBlogsTable extends Migration
      {
      
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::create('blogs', function($table)
              {
                  $table->increments('id');
                  $table->string('title');
                  $table->text('description')->nullable();
                  $table->integer('user_id');
                  $table->timestamps();
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::drop('blogs');
          }
      }
      

      和你聊天后,我知道两个问题,一个是上面已经提到的另一个问题是由于类没有注册到composer autoload中。您必须手动运行:php composer.phar dump-autoload

      【讨论】:

      • 刚刚尝试过,但仍然没有运气。我仍然得到类未找到错误。
      • 遇到了同样的问题,运行php composer.phar dump-autoload 工作正常。
      【解决方案3】:

      工匠做同样的工作:

      php artisan dump-autoload
      

      只是提醒不熟悉composer的人。

      【讨论】:

      • 这实际上比使用 composer 更好,因为它会生成一个优化的 classmap
      • 其实这个命令对我来说并不存在,但是composer dump-autoload 解决了这个问题。谢谢!至少对于这个想法。
      • 搜索问题的人请注意,这个问题是3年前的问题,laravel的版本是4。而且软件本身也在不断变化。这意味着,这个命令在最新的工匠中不存在。谢谢。
      【解决方案4】:

      更新您的作曲家 (composer self-update),然后运行您的作曲家函数。

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 2021-02-19
        • 2013-10-16
        • 2015-08-29
        • 1970-01-01
        • 2018-11-05
        • 1970-01-01
        • 2017-01-16
        • 2021-11-07
        相关资源
        最近更新 更多